Changeset 2046151
- Timestamp:
- 03/07/2019 05:19:53 PM (7 years ago)
- Location:
- gecko-grid-layout/trunk
- Files:
-
- 6 edited
-
dist/editor-styles.css (modified) (1 diff)
-
dist/editor.bundle.js (modified) (1 diff)
-
dist/public.bundle.js (modified) (1 diff)
-
dist/style.css (modified) (1 diff)
-
gecko-grid-layout.php (modified) (1 diff)
-
readme.txt (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
gecko-grid-layout/trunk/dist/editor-styles.css
r2045438 r2046151 238 238 background-color: #f0f0f0; 239 239 } 240 241 /*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vZWRpdG9yLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxvQkFBYTtFQUFiLG9CQUFhO0VBQWIsYUFBYTtFQUNiLG1CQUFlO01BQWYsZUFBZTtBQUNqQjtBQUNBO0VBQ0Usa0JBQWtCO0VBQ2xCLGtCQUFrQjtFQUNsQixvQkFBYTtFQUFiLG9CQUFhO0VBQWIsYUFBYTtFQUNiLDRCQUFzQjtFQUF0Qiw2QkFBc0I7TUFBdEIsMEJBQXNCO1VBQXRCLHNCQUFzQjtFQUN0QixrQkFBa0I7RUFDbEIsd0JBQXVCO01BQXZCLHFCQUF1QjtVQUF2Qix1QkFBdUI7RUFDdkIseUJBQW1CO01BQW5CLHNCQUFtQjtVQUFuQixtQkFBbUI7RUFDbkIsZUFBZTtFQUNmLDZCQUFnQjtNQUFoQixnQkFBZ0I7RUFDaEIsbUJBQVk7TUFBWixvQkFBWTtVQUFaLFlBQVk7RUFDWix5QkFBeUI7RUFDekIsZUFBZTtBQUNqQjtBQUNBO0VBQ0UseUJBQXlCO0FBQzNCO0FBQ0E7RUFDRSx5QkFBeUI7QUFDM0I7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsK0NBQStDO0VBQy9DLGtEQUFrRDtFQUNsRCw2RUFBNkU7QUFDL0U7QUFDQTtFQUNFLG9CQUFhO0VBQWIsb0JBQWE7RUFBYixhQUFhO0FBQ2Y7QUFDQTtFQUNFLFdBQVc7QUFDYjtBQUNBO0VBQ0UsWUFBWTtBQUNkO0FBQ0E7RUFDRSxZQUFZO0FBQ2Q7QUFDQTtFQUNFLFlBQVk7QUFDZDtBQUNBO0VBQ0UsWUFBWTtBQUNkO0FBQ0E7RUFDRSxZQUFZO0VBQ1oseUJBQXlCO0VBQ3pCLGtCQUFrQjtBQUNwQjtBQUNBO0VBQ0UsY0FBYztFQUNkLFdBQVc7RUFDWCxXQUFXO0VBQ1gsdUJBQXVCO0VBQ3ZCLGtCQUFrQjtFQUNsQixvQkFBb0I7QUFDdEI7QUFDQTtFQUNFLHFCQUFxQjtBQUN2QjtBQUNBO0VBQ0UsY0FBYztFQUNkLFVBQVU7RUFDVixZQUFZO0VBQ1osdUJBQXVCO0VBQ3ZCLGtCQUFrQjtFQUNsQixxQkFBcUI7QUFDdkI7QUFDQTtFQUNFLHFCQUFxQjtBQUN2QjtBQUNBO0VBQ0UsY0FBYztFQUNkLFdBQVc7RUFDWCxZQUFZO0VBQ1osc0JBQXNCO0VBQ3RCLGtCQUFrQjtFQUNsQixvQkFBb0I7RUFDcEIscUJBQXFCO0FBQ3ZCO0FBQ0E7RUFDRSxxQkFBcUI7QUFDdkI7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsYUFBYTtFQUNiLG1EQUFtRDtFQUNuRCxjQUFjO0VBQ2Qsa0NBQWtDO0VBQ2xDLHFCQUFxQjtFQUNyQiw0QkFBNEI7RUFDNUIsU0FBUztBQUNYO0FBQ0E7OztFQUdFLHlCQUF5QjtFQUN6QiwwQkFBMEI7RUFDMUIsdUJBQXVCO0VBQ3ZCLG9CQUFvQjtFQUNwQixZQUFZO0VBQ1osc0JBQXNCO0VBQ3RCLHlCQUF5QjtFQUN6QixvQkFBYTtFQUFiLG9CQUFhO0VBQWIsYUFBYTtFQUNiLDRCQUFzQjtFQUF0Qiw2QkFBc0I7TUFBdEIsMEJBQXNCO1VBQXRCLHNCQUFzQjtFQUN0QixtQkFBTztNQUFQLFdBQU87VUFBUCxPQUFPO0VBQ1AsNkJBQWdCO01BQWhCLGdCQUFnQjtFQUNoQixjQUFjO0VBQ2QsaUJBQWlCO0VBQ2pCLFlBQVk7RUFDWixzQkFBc0I7RUFDdEIsMkJBQTJCO0VBQzNCLGlDQUFpQztFQUNqQyx3Q0FBd0M7RUFDeEMsNEJBQTRCO0FBQzlCO0FBQ0E7RUFDRSw2QkFBZ0I7TUFBaEIsZ0JBQWdCO0VBQ2hCLG9CQUFhO0VBQWIsb0JBQWE7RUFBYixhQUFhO0VBQ2IsNEJBQXNCO0VBQXRCLDZCQUFzQjtNQUF0QiwwQkFBc0I7VUFBdEIsc0JBQXNCO0VBQ3RCLG1CQUFPO01BQVAsV0FBTztVQUFQLE9BQU87QUFDVDtBQUNBO0VBQ0UsNkJBQWdCO01BQWhCLGdCQUFnQjtFQUNoQixZQUFZO0FBQ2Q7QUFDQTtFQUNFLGNBQWM7RUFDZCxrQkFBa0I7RUFDbEIsaUJBQWlCO0VBQ2pCLG9CQUFvQjtFQUNwQixlQUFlO0VBQ2YseUJBQXlCO0FBQzNCO0FBQ0E7RUFDRSx5QkFBeUI7QUFDM0I7O0FBRUE7RUFDRSx3QkFBd0I7QUFDMUI7O0FBRUE7OztFQUdFLG9CQUFhO0VBQWIsb0JBQWE7RUFBYixhQUFhO0VBQ2IsNEJBQXNCO0VBQXRCLDZCQUFzQjtNQUF0QiwwQkFBc0I7VUFBdEIsc0JBQXNCO0VBQ3RCLFlBQVk7RUFDWixXQUFXO0VBQ1gsU0FBUztBQUNYOztBQUVBO0VBQ0UscUJBQXFCO0FBQ3ZCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLHFEQUFxRDtFQUNyRCxjQUFjO0VBQ2Qsb0JBQW9CO0VBQ3BCLHFCQUFxQjtBQUN2QjtBQUNBO0VBQ0UsY0FBYztFQUNkLHVCQUF1QjtFQUN2QixvQkFBb0I7RUFDcEIsYUFBYTtFQUNiLGVBQWU7RUFDZixrQkFBa0I7RUFDbEIseUJBQXlCO0VBQ3pCLGVBQWU7RUFDZixrQkFBa0I7QUFDcEI7QUFDQTtFQUNFLHlCQUF5QjtBQUMzQjs7QUFFQTtFQUNFLGlCQUFpQjtFQUNqQix5QkFBeUI7RUFDekIsWUFBWTtFQUNaLGFBQWE7RUFDYixxREFBcUQ7RUFDckQsYUFBYTtFQUNiLGtDQUFrQztFQUNsQyxxQkFBcUI7QUFDdkI7QUFDQTtFQUNFLGNBQWM7RUFDZCx1QkFBdUI7RUFDdkIsb0JBQW9CO0VBQ3BCLHlCQUF5QjtBQUMzQixDIiwiZmlsZSI6ImVkaXRvci1zdHlsZXMuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LXR5cGUtc2VsZWN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xufVxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LXR5cGUtc2VsZWN0X19pdGVtIHtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBsaW5lLWhlaWdodDogMS4yZW07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDAuNXJlbTtcbiAgZmxleC1iYXNpczogOTBweDtcbiAgZmxleC1ncm93OiAwO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZjBmMGYwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtdHlwZS1zZWxlY3RfX2l0ZW06aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkFGQUZBO1xufVxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LXR5cGUtc2VsZWN0X19pdGVtLS1zZWxlY3RlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGNUY1RjU7XG59XG5cbi5nZWNrby10cmJsIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiByZXBlYXQoMywgbWlubWF4KDFweCwgMWZyKSk7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDcsIG1pbm1heCgxcHgsIDFmcikpO1xuICBncmlkLXRlbXBsYXRlLWFyZWFzOiBcInRsIHRsIHQgdCB0IHRyIHRyXCIgXCJsIGwgbCBjIHIgciByIFwiIFwiYmwgYmwgYiBiIGIgYnIgYnJcIjtcbn1cbi5nZWNrby10cmJsX19pbnB1dCB7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4uZ2Vja28tdHJibF9faW5wdXQgaW5wdXQge1xuICB3aWR0aDogMTAwJTtcbn1cbi5nZWNrby10cmJsX19pbnB1dC0tdCB7XG4gIGdyaWQtYXJlYTogdDtcbn1cbi5nZWNrby10cmJsX19pbnB1dC0tciB7XG4gIGdyaWQtYXJlYTogcjtcbn1cbi5nZWNrby10cmJsX19pbnB1dC0tYiB7XG4gIGdyaWQtYXJlYTogYjtcbn1cbi5nZWNrby10cmJsX19pbnB1dC0tbCB7XG4gIGdyaWQtYXJlYTogbDtcbn1cbi5nZWNrby10cmJsX19sb2NrIHtcbiAgZ3JpZC1hcmVhOiBjO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBkaW1ncmF5O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uZ2Vja28tdHJibF9fbG9ja19feCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAycHg7XG4gIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogY2FsYyg1MCUgLSAxcHgpO1xufVxuLmdlY2tvLXRyYmxfX2xvY2tfX3gudHJ1ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJlZDtcbn1cbi5nZWNrby10cmJsX19sb2NrX195IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAycHg7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogY2FsYyg1MCUgLSAxcHgpO1xufVxuLmdlY2tvLXRyYmxfX2xvY2tfX3kudHJ1ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJlZDtcbn1cbi5nZWNrby10cmJsX19sb2NrX194eSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTBweDtcbiAgaGVpZ2h0OiAxMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBncmV5O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogY2FsYyg1MCUgLSA1cHgpO1xuICBsZWZ0OiBjYWxjKDUwJSAtIDVweCk7XG59XG4uZ2Vja28tdHJibF9fbG9ja19feHkudHJ1ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJlZDtcbn1cblxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvciA+IC5lZGl0b3ItaW5uZXItYmxvY2tzID4gLmVkaXRvci1ibG9jay1saXN0X19sYXlvdXQge1xuICBwYWRkaW5nOiAxcmVtO1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgxMiwgbWlubWF4KDFweCwgMWZyKSk7XG4gIGdyaWQtZ2FwOiAxcmVtO1xuICBncmlkLWF1dG8tcm93czogbWlubWF4KDUwcHgsIGF1dG8pO1xuICBncmlkLWF1dG8tZmxvdzogZGVuc2U7XG4gIGJvcmRlcjogMXB4IGRhc2hlZCBsaWdodGJsdWU7XG4gIG1hcmdpbjogMDtcbn1cbi53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3IgPiAuZWRpdG9yLWlubmVyLWJsb2NrcyA+IC5lZGl0b3ItYmxvY2stbGlzdF9fbGF5b3V0ID4gW2RhdGEtdHlwZT1cImdlY2tvL2dyaWQtbGF5b3V0LWl0ZW1cIl0sXG4ud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yID4gLmVkaXRvci1pbm5lci1ibG9ja3MgPiAuZWRpdG9yLWJsb2NrLWxpc3RfX2xheW91dCA+IFtkYXRhLXR5cGU9XCJnZWNrby9ncmlkLWxheW91dC1iYXNpY1wiXSxcbi53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3IgPiAuZWRpdG9yLWlubmVyLWJsb2NrcyA+IC5lZGl0b3ItYmxvY2stbGlzdF9fbGF5b3V0ID4gW2RhdGEtdHlwZT1cImdlY2tvL2dyaWQtbGF5b3V0LWltYWdlXCJdIHtcbiAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcbiAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gIGdyaWQtY29sdW1uLWVuZDogc3BhbiAxO1xuICBncmlkLXJvdy1lbmQ6IHNwYW4gMTtcbiAgbWluLXdpZHRoOiAwO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmbGV4OiAxO1xuICBmbGV4LWJhc2lzOiAxMDAlO1xuICBwYWRkaW5nLXRvcDogMDtcbiAgcGFkZGluZy1ib3R0b206IDA7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gIGJvcmRlcjogMXB4IGRhc2hlZCBsaWdodGJsdWU7XG59XG4ud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yID4gLmVkaXRvci1pbm5lci1ibG9ja3MgPiAuZWRpdG9yLWJsb2NrLWxpc3RfX2xheW91dCAuZWRpdG9yLWJsb2NrLWxpc3RfX2Jsb2NrLWVkaXQge1xuICBmbGV4LWJhc2lzOiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmbGV4OiAxO1xufVxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvciA+IC5lZGl0b3ItaW5uZXItYmxvY2tzID4gLmVkaXRvci1ibG9jay1saXN0X19sYXlvdXQgLmVkaXRvci1ibG9jay1saXN0X19ibG9jay1lZGl0ID4gW2RhdGEtYmxvY2tdIHtcbiAgZmxleC1iYXNpczogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvciAuYmxvY2stbGlzdC1hcHBlbmRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGdyaWQtY29sdW1uOiAxLy0xO1xuICBncmlkLXJvdy1lbmQ6IHNwYW4gMTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwO1xufVxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvciAuYmxvY2stbGlzdC1hcHBlbmRlcjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmM2YzZjM7XG59XG5cbi5nZWNrby1ncmlkLWxheW91dC1lZGl0b3Itc3R5bGVzIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4uZ2Vja28tZ3JpZC1sYXlvdXQtYmFzaWMsXG4uZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2UsXG4uZ2Vja28tZ3JpZC1sYXlvdXQtaXRlbSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMDtcbn1cblxuLmlzLWRyYWdnaW5nLWNvbXBvbmVudHMtZHJhZ2dhYmxlIC5nZWNrby1ncmlkLWxheW91dC1pbWFnZS5pcy1zdHlsZS1ob3ZlciAuZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2VfX2NhcHRpb24ge1xuICBvcGFjaXR5OiAxICFpbXBvcnRhbnQ7XG59XG5cbi5nZWNrby1ncmlkLWxheW91dC10ZW1wbGF0ZS1zZWxlY3RfX3RlbXBsYXRlcyB7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDEyLCBtaW5tYXgoMTVweCwgYXV0bykpO1xuICBncmlkLWdhcDogMXJlbTtcbiAgZ3JpZC1hdXRvLXJvd3M6IGF1dG87XG4gIGdyaWQtYXV0by1mbG93OiBkZW5zZTtcbn1cbi5nZWNrby1ncmlkLWxheW91dC10ZW1wbGF0ZS1zZWxlY3RfX3RlbXBsYXRlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGdyaWQtY29sdW1uLWVuZDogc3BhbiA0O1xuICBncmlkLXJvdy1lbmQ6IHNwYW4gMTtcbiAgcGFkZGluZzogMXJlbTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xufVxuLmdlY2tvLWdyaWQtbGF5b3V0LXRlbXBsYXRlLXNlbGVjdF9fdGVtcGxhdGU6aG92ZXIge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZjBmMGYwO1xufVxuXG4uZ2Vja28tZ3JpZC1sYXlvdXQtdGVtcGxhdGUtcHJldmlldyB7XG4gIG1pbi1oZWlnaHQ6IDEwMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDBEMEQwO1xuICBwYWRkaW5nOiAzcHg7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDEyLCBtaW5tYXgoMTVweCwgYXV0bykpO1xuICBncmlkLWdhcDogM3B4O1xuICBncmlkLWF1dG8tcm93czogbWlubWF4KDE1cHgsIGF1dG8pO1xuICBncmlkLWF1dG8tZmxvdzogZGVuc2U7XG59XG4uZ2Vja28tZ3JpZC1sYXlvdXQtdGVtcGxhdGUtcHJldmlld19faXRlbSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBncmlkLWNvbHVtbi1lbmQ6IHNwYW4gNDtcbiAgZ3JpZC1yb3ctZW5kOiBzcGFuIDE7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjA7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==*/ -
gecko-grid-layout/trunk/dist/editor.bundle.js
r2046091 r2046151 1 /******/ (function(modules) { // webpackBootstrap 2 /******/ // The module cache 3 /******/ var installedModules = {}; 4 /******/ 5 /******/ // The require function 6 /******/ function __webpack_require__(moduleId) { 7 /******/ 8 /******/ // Check if module is in cache 9 /******/ if(installedModules[moduleId]) { 10 /******/ return installedModules[moduleId].exports; 11 /******/ } 12 /******/ // Create a new module (and put it into the cache) 13 /******/ var module = installedModules[moduleId] = { 14 /******/ i: moduleId, 15 /******/ l: false, 16 /******/ exports: {} 17 /******/ }; 18 /******/ 19 /******/ // Execute the module function 20 /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 21 /******/ 22 /******/ // Flag the module as loaded 23 /******/ module.l = true; 24 /******/ 25 /******/ // Return the exports of the module 26 /******/ return module.exports; 27 /******/ } 28 /******/ 29 /******/ 30 /******/ // expose the modules object (__webpack_modules__) 31 /******/ __webpack_require__.m = modules; 32 /******/ 33 /******/ // expose the module cache 34 /******/ __webpack_require__.c = installedModules; 35 /******/ 36 /******/ // define getter function for harmony exports 37 /******/ __webpack_require__.d = function(exports, name, getter) { 38 /******/ if(!__webpack_require__.o(exports, name)) { 39 /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); 40 /******/ } 41 /******/ }; 42 /******/ 43 /******/ // define __esModule on exports 44 /******/ __webpack_require__.r = function(exports) { 45 /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 46 /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 47 /******/ } 48 /******/ Object.defineProperty(exports, '__esModule', { value: true }); 49 /******/ }; 50 /******/ 51 /******/ // create a fake namespace object 52 /******/ // mode & 1: value is a module id, require it 53 /******/ // mode & 2: merge all properties of value into the ns 54 /******/ // mode & 4: return value when already ns object 55 /******/ // mode & 8|1: behave like require 56 /******/ __webpack_require__.t = function(value, mode) { 57 /******/ if(mode & 1) value = __webpack_require__(value); 58 /******/ if(mode & 8) return value; 59 /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; 60 /******/ var ns = Object.create(null); 61 /******/ __webpack_require__.r(ns); 62 /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); 63 /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); 64 /******/ return ns; 65 /******/ }; 66 /******/ 67 /******/ // getDefaultExport function for compatibility with non-harmony modules 68 /******/ __webpack_require__.n = function(module) { 69 /******/ var getter = module && module.__esModule ? 70 /******/ function getDefault() { return module['default']; } : 71 /******/ function getModuleExports() { return module; }; 72 /******/ __webpack_require__.d(getter, 'a', getter); 73 /******/ return getter; 74 /******/ }; 75 /******/ 76 /******/ // Object.prototype.hasOwnProperty.call 77 /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 78 /******/ 79 /******/ // __webpack_public_path__ 80 /******/ __webpack_require__.p = "/wp-content/plugins/gecko-grid-layout/dist/"; 81 /******/ 82 /******/ 83 /******/ // Load entry module and return exports 84 /******/ return __webpack_require__(__webpack_require__.s = "./src/index.js"); 85 /******/ }) 86 /************************************************************************/ 87 /******/ ({ 88 89 /***/ "./node_modules/@babel/runtime/helpers/assertThisInitialized.js": 90 /*!**********************************************************************!*\ 91 !*** ./node_modules/@babel/runtime/helpers/assertThisInitialized.js ***! 92 \**********************************************************************/ 93 /*! no static exports found */ 94 /***/ (function(module, exports) { 95 96 function _assertThisInitialized(self) { 97 if (self === void 0) { 98 throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); 99 } 100 101 return self; 102 } 103 104 module.exports = _assertThisInitialized; 105 106 /***/ }), 107 108 /***/ "./node_modules/@babel/runtime/helpers/classCallCheck.js": 109 /*!***************************************************************!*\ 110 !*** ./node_modules/@babel/runtime/helpers/classCallCheck.js ***! 111 \***************************************************************/ 112 /*! no static exports found */ 113 /***/ (function(module, exports) { 114 115 function _classCallCheck(instance, Constructor) { 116 if (!(instance instanceof Constructor)) { 117 throw new TypeError("Cannot call a class as a function"); 118 } 119 } 120 121 module.exports = _classCallCheck; 122 123 /***/ }), 124 125 /***/ "./node_modules/@babel/runtime/helpers/createClass.js": 126 /*!************************************************************!*\ 127 !*** ./node_modules/@babel/runtime/helpers/createClass.js ***! 128 \************************************************************/ 129 /*! no static exports found */ 130 /***/ (function(module, exports) { 131 132 function _defineProperties(target, props) { 133 for (var i = 0; i < props.length; i++) { 134 var descriptor = props[i]; 135 descriptor.enumerable = descriptor.enumerable || false; 136 descriptor.configurable = true; 137 if ("value" in descriptor) descriptor.writable = true; 138 Object.defineProperty(target, descriptor.key, descriptor); 139 } 140 } 141 142 function _createClass(Constructor, protoProps, staticProps) { 143 if (protoProps) _defineProperties(Constructor.prototype, protoProps); 144 if (staticProps) _defineProperties(Constructor, staticProps); 145 return Constructor; 146 } 147 148 module.exports = _createClass; 149 150 /***/ }), 151 152 /***/ "./node_modules/@babel/runtime/helpers/defineProperty.js": 153 /*!***************************************************************!*\ 154 !*** ./node_modules/@babel/runtime/helpers/defineProperty.js ***! 155 \***************************************************************/ 156 /*! no static exports found */ 157 /***/ (function(module, exports) { 158 159 function _defineProperty(obj, key, value) { 160 if (key in obj) { 161 Object.defineProperty(obj, key, { 162 value: value, 163 enumerable: true, 164 configurable: true, 165 writable: true 166 }); 167 } else { 168 obj[key] = value; 169 } 170 171 return obj; 172 } 173 174 module.exports = _defineProperty; 175 176 /***/ }), 177 178 /***/ "./node_modules/@babel/runtime/helpers/getPrototypeOf.js": 179 /*!***************************************************************!*\ 180 !*** ./node_modules/@babel/runtime/helpers/getPrototypeOf.js ***! 181 \***************************************************************/ 182 /*! no static exports found */ 183 /***/ (function(module, exports) { 184 185 function _getPrototypeOf(o) { 186 module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { 187 return o.__proto__ || Object.getPrototypeOf(o); 188 }; 189 return _getPrototypeOf(o); 190 } 191 192 module.exports = _getPrototypeOf; 193 194 /***/ }), 195 196 /***/ "./node_modules/@babel/runtime/helpers/inherits.js": 197 /*!*********************************************************!*\ 198 !*** ./node_modules/@babel/runtime/helpers/inherits.js ***! 199 \*********************************************************/ 200 /*! no static exports found */ 201 /***/ (function(module, exports, __webpack_require__) { 202 203 var setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf */ "./node_modules/@babel/runtime/helpers/setPrototypeOf.js"); 204 205 function _inherits(subClass, superClass) { 206 if (typeof superClass !== "function" && superClass !== null) { 207 throw new TypeError("Super expression must either be null or a function"); 208 } 209 210 subClass.prototype = Object.create(superClass && superClass.prototype, { 211 constructor: { 212 value: subClass, 213 writable: true, 214 configurable: true 215 } 216 }); 217 if (superClass) setPrototypeOf(subClass, superClass); 218 } 219 220 module.exports = _inherits; 221 222 /***/ }), 223 224 /***/ "./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js": 225 /*!**************************************************************************!*\ 226 !*** ./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js ***! 227 \**************************************************************************/ 228 /*! no static exports found */ 229 /***/ (function(module, exports, __webpack_require__) { 230 231 var _typeof = __webpack_require__(/*! ../helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js"); 232 233 var assertThisInitialized = __webpack_require__(/*! ./assertThisInitialized */ "./node_modules/@babel/runtime/helpers/assertThisInitialized.js"); 234 235 function _possibleConstructorReturn(self, call) { 236 if (call && (_typeof(call) === "object" || typeof call === "function")) { 237 return call; 238 } 239 240 return assertThisInitialized(self); 241 } 242 243 module.exports = _possibleConstructorReturn; 244 245 /***/ }), 246 247 /***/ "./node_modules/@babel/runtime/helpers/setPrototypeOf.js": 248 /*!***************************************************************!*\ 249 !*** ./node_modules/@babel/runtime/helpers/setPrototypeOf.js ***! 250 \***************************************************************/ 251 /*! no static exports found */ 252 /***/ (function(module, exports) { 253 254 function _setPrototypeOf(o, p) { 255 module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { 256 o.__proto__ = p; 257 return o; 258 }; 259 260 return _setPrototypeOf(o, p); 261 } 262 263 module.exports = _setPrototypeOf; 264 265 /***/ }), 266 267 /***/ "./node_modules/@babel/runtime/helpers/typeof.js": 268 /*!*******************************************************!*\ 269 !*** ./node_modules/@babel/runtime/helpers/typeof.js ***! 270 \*******************************************************/ 271 /*! no static exports found */ 272 /***/ (function(module, exports) { 273 274 function _typeof2(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof2(obj); } 275 276 function _typeof(obj) { 277 if (typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol") { 278 module.exports = _typeof = function _typeof(obj) { 279 return _typeof2(obj); 280 }; 281 } else { 282 module.exports = _typeof = function _typeof(obj) { 283 return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : _typeof2(obj); 284 }; 285 } 286 287 return _typeof(obj); 288 } 289 290 module.exports = _typeof; 291 292 /***/ }), 293 294 /***/ "./node_modules/tinycolor2/tinycolor.js": 295 /*!**********************************************!*\ 296 !*** ./node_modules/tinycolor2/tinycolor.js ***! 297 \**********************************************/ 298 /*! no static exports found */ 299 /***/ (function(module, exports, __webpack_require__) { 300 301 var __WEBPACK_AMD_DEFINE_RESULT__;// TinyColor v1.4.1 302 // https://github.com/bgrins/TinyColor 303 // Brian Grinstead, MIT License 304 305 (function(Math) { 306 307 var trimLeft = /^\s+/, 308 trimRight = /\s+$/, 309 tinyCounter = 0, 310 mathRound = Math.round, 311 mathMin = Math.min, 312 mathMax = Math.max, 313 mathRandom = Math.random; 314 315 function tinycolor (color, opts) { 316 317 color = (color) ? color : ''; 318 opts = opts || { }; 319 320 // If input is already a tinycolor, return itself 321 if (color instanceof tinycolor) { 322 return color; 323 } 324 // If we are called as a function, call using new instead 325 if (!(this instanceof tinycolor)) { 326 return new tinycolor(color, opts); 327 } 328 329 var rgb = inputToRGB(color); 330 this._originalInput = color, 331 this._r = rgb.r, 332 this._g = rgb.g, 333 this._b = rgb.b, 334 this._a = rgb.a, 335 this._roundA = mathRound(100*this._a) / 100, 336 this._format = opts.format || rgb.format; 337 this._gradientType = opts.gradientType; 338 339 // Don't let the range of [0,255] come back in [0,1]. 340 // Potentially lose a little bit of precision here, but will fix issues where 341 // .5 gets interpreted as half of the total, instead of half of 1 342 // If it was supposed to be 128, this was already taken care of by `inputToRgb` 343 if (this._r < 1) { this._r = mathRound(this._r); } 344 if (this._g < 1) { this._g = mathRound(this._g); } 345 if (this._b < 1) { this._b = mathRound(this._b); } 346 347 this._ok = rgb.ok; 348 this._tc_id = tinyCounter++; 349 } 350 351 tinycolor.prototype = { 352 isDark: function() { 353 return this.getBrightness() < 128; 354 }, 355 isLight: function() { 356 return !this.isDark(); 357 }, 358 isValid: function() { 359 return this._ok; 360 }, 361 getOriginalInput: function() { 362 return this._originalInput; 363 }, 364 getFormat: function() { 365 return this._format; 366 }, 367 getAlpha: function() { 368 return this._a; 369 }, 370 getBrightness: function() { 371 //http://www.w3.org/TR/AERT#color-contrast 372 var rgb = this.toRgb(); 373 return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000; 374 }, 375 getLuminance: function() { 376 //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef 377 var rgb = this.toRgb(); 378 var RsRGB, GsRGB, BsRGB, R, G, B; 379 RsRGB = rgb.r/255; 380 GsRGB = rgb.g/255; 381 BsRGB = rgb.b/255; 382 383 if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);} 384 if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);} 385 if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);} 386 return (0.2126 * R) + (0.7152 * G) + (0.0722 * B); 387 }, 388 setAlpha: function(value) { 389 this._a = boundAlpha(value); 390 this._roundA = mathRound(100*this._a) / 100; 391 return this; 392 }, 393 toHsv: function() { 394 var hsv = rgbToHsv(this._r, this._g, this._b); 395 return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a }; 396 }, 397 toHsvString: function() { 398 var hsv = rgbToHsv(this._r, this._g, this._b); 399 var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100); 400 return (this._a == 1) ? 401 "hsv(" + h + ", " + s + "%, " + v + "%)" : 402 "hsva(" + h + ", " + s + "%, " + v + "%, "+ this._roundA + ")"; 403 }, 404 toHsl: function() { 405 var hsl = rgbToHsl(this._r, this._g, this._b); 406 return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a }; 407 }, 408 toHslString: function() { 409 var hsl = rgbToHsl(this._r, this._g, this._b); 410 var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100); 411 return (this._a == 1) ? 412 "hsl(" + h + ", " + s + "%, " + l + "%)" : 413 "hsla(" + h + ", " + s + "%, " + l + "%, "+ this._roundA + ")"; 414 }, 415 toHex: function(allow3Char) { 416 return rgbToHex(this._r, this._g, this._b, allow3Char); 417 }, 418 toHexString: function(allow3Char) { 419 return '#' + this.toHex(allow3Char); 420 }, 421 toHex8: function(allow4Char) { 422 return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char); 423 }, 424 toHex8String: function(allow4Char) { 425 return '#' + this.toHex8(allow4Char); 426 }, 427 toRgb: function() { 428 return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a }; 429 }, 430 toRgbString: function() { 431 return (this._a == 1) ? 432 "rgb(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ")" : 433 "rgba(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ", " + this._roundA + ")"; 434 }, 435 toPercentageRgb: function() { 436 return { r: mathRound(bound01(this._r, 255) * 100) + "%", g: mathRound(bound01(this._g, 255) * 100) + "%", b: mathRound(bound01(this._b, 255) * 100) + "%", a: this._a }; 437 }, 438 toPercentageRgbString: function() { 439 return (this._a == 1) ? 440 "rgb(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%)" : 441 "rgba(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%, " + this._roundA + ")"; 442 }, 443 toName: function() { 444 if (this._a === 0) { 445 return "transparent"; 446 } 447 448 if (this._a < 1) { 449 return false; 450 } 451 452 return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false; 453 }, 454 toFilter: function(secondColor) { 455 var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a); 456 var secondHex8String = hex8String; 457 var gradientType = this._gradientType ? "GradientType = 1, " : ""; 458 459 if (secondColor) { 460 var s = tinycolor(secondColor); 461 secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a); 462 } 463 464 return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")"; 465 }, 466 toString: function(format) { 467 var formatSet = !!format; 468 format = format || this._format; 469 470 var formattedString = false; 471 var hasAlpha = this._a < 1 && this._a >= 0; 472 var needsAlphaFormat = !formatSet && hasAlpha && (format === "hex" || format === "hex6" || format === "hex3" || format === "hex4" || format === "hex8" || format === "name"); 473 474 if (needsAlphaFormat) { 475 // Special case for "transparent", all other non-alpha formats 476 // will return rgba when there is transparency. 477 if (format === "name" && this._a === 0) { 478 return this.toName(); 479 } 480 return this.toRgbString(); 481 } 482 if (format === "rgb") { 483 formattedString = this.toRgbString(); 484 } 485 if (format === "prgb") { 486 formattedString = this.toPercentageRgbString(); 487 } 488 if (format === "hex" || format === "hex6") { 489 formattedString = this.toHexString(); 490 } 491 if (format === "hex3") { 492 formattedString = this.toHexString(true); 493 } 494 if (format === "hex4") { 495 formattedString = this.toHex8String(true); 496 } 497 if (format === "hex8") { 498 formattedString = this.toHex8String(); 499 } 500 if (format === "name") { 501 formattedString = this.toName(); 502 } 503 if (format === "hsl") { 504 formattedString = this.toHslString(); 505 } 506 if (format === "hsv") { 507 formattedString = this.toHsvString(); 508 } 509 510 return formattedString || this.toHexString(); 511 }, 512 clone: function() { 513 return tinycolor(this.toString()); 514 }, 515 516 _applyModification: function(fn, args) { 517 var color = fn.apply(null, [this].concat([].slice.call(args))); 518 this._r = color._r; 519 this._g = color._g; 520 this._b = color._b; 521 this.setAlpha(color._a); 522 return this; 523 }, 524 lighten: function() { 525 return this._applyModification(lighten, arguments); 526 }, 527 brighten: function() { 528 return this._applyModification(brighten, arguments); 529 }, 530 darken: function() { 531 return this._applyModification(darken, arguments); 532 }, 533 desaturate: function() { 534 return this._applyModification(desaturate, arguments); 535 }, 536 saturate: function() { 537 return this._applyModification(saturate, arguments); 538 }, 539 greyscale: function() { 540 return this._applyModification(greyscale, arguments); 541 }, 542 spin: function() { 543 return this._applyModification(spin, arguments); 544 }, 545 546 _applyCombination: function(fn, args) { 547 return fn.apply(null, [this].concat([].slice.call(args))); 548 }, 549 analogous: function() { 550 return this._applyCombination(analogous, arguments); 551 }, 552 complement: function() { 553 return this._applyCombination(complement, arguments); 554 }, 555 monochromatic: function() { 556 return this._applyCombination(monochromatic, arguments); 557 }, 558 splitcomplement: function() { 559 return this._applyCombination(splitcomplement, arguments); 560 }, 561 triad: function() { 562 return this._applyCombination(triad, arguments); 563 }, 564 tetrad: function() { 565 return this._applyCombination(tetrad, arguments); 566 } 567 }; 568 569 // If input is an object, force 1 into "1.0" to handle ratios properly 570 // String input requires "1.0" as input, so 1 will be treated as 1 571 tinycolor.fromRatio = function(color, opts) { 572 if (typeof color == "object") { 573 var newColor = {}; 574 for (var i in color) { 575 if (color.hasOwnProperty(i)) { 576 if (i === "a") { 577 newColor[i] = color[i]; 578 } 579 else { 580 newColor[i] = convertToPercentage(color[i]); 581 } 582 } 583 } 584 color = newColor; 585 } 586 587 return tinycolor(color, opts); 588 }; 589 590 // Given a string or object, convert that input to RGB 591 // Possible string inputs: 592 // 593 // "red" 594 // "#f00" or "f00" 595 // "#ff0000" or "ff0000" 596 // "#ff000000" or "ff000000" 597 // "rgb 255 0 0" or "rgb (255, 0, 0)" 598 // "rgb 1.0 0 0" or "rgb (1, 0, 0)" 599 // "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1" 600 // "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1" 601 // "hsl(0, 100%, 50%)" or "hsl 0 100% 50%" 602 // "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1" 603 // "hsv(0, 100%, 100%)" or "hsv 0 100% 100%" 604 // 605 function inputToRGB(color) { 606 607 var rgb = { r: 0, g: 0, b: 0 }; 608 var a = 1; 609 var s = null; 610 var v = null; 611 var l = null; 612 var ok = false; 613 var format = false; 614 615 if (typeof color == "string") { 616 color = stringInputToObject(color); 617 } 618 619 if (typeof color == "object") { 620 if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) { 621 rgb = rgbToRgb(color.r, color.g, color.b); 622 ok = true; 623 format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb"; 624 } 625 else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) { 626 s = convertToPercentage(color.s); 627 v = convertToPercentage(color.v); 628 rgb = hsvToRgb(color.h, s, v); 629 ok = true; 630 format = "hsv"; 631 } 632 else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) { 633 s = convertToPercentage(color.s); 634 l = convertToPercentage(color.l); 635 rgb = hslToRgb(color.h, s, l); 636 ok = true; 637 format = "hsl"; 638 } 639 640 if (color.hasOwnProperty("a")) { 641 a = color.a; 642 } 643 } 644 645 a = boundAlpha(a); 646 647 return { 648 ok: ok, 649 format: color.format || format, 650 r: mathMin(255, mathMax(rgb.r, 0)), 651 g: mathMin(255, mathMax(rgb.g, 0)), 652 b: mathMin(255, mathMax(rgb.b, 0)), 653 a: a 654 }; 655 } 656 657 658 // Conversion Functions 659 // -------------------- 660 661 // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from: 662 // <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript> 663 664 // `rgbToRgb` 665 // Handle bounds / percentage checking to conform to CSS color spec 666 // <http://www.w3.org/TR/css3-color/> 667 // *Assumes:* r, g, b in [0, 255] or [0, 1] 668 // *Returns:* { r, g, b } in [0, 255] 669 function rgbToRgb(r, g, b){ 670 return { 671 r: bound01(r, 255) * 255, 672 g: bound01(g, 255) * 255, 673 b: bound01(b, 255) * 255 674 }; 675 } 676 677 // `rgbToHsl` 678 // Converts an RGB color value to HSL. 679 // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1] 680 // *Returns:* { h, s, l } in [0,1] 681 function rgbToHsl(r, g, b) { 682 683 r = bound01(r, 255); 684 g = bound01(g, 255); 685 b = bound01(b, 255); 686 687 var max = mathMax(r, g, b), min = mathMin(r, g, b); 688 var h, s, l = (max + min) / 2; 689 690 if(max == min) { 691 h = s = 0; // achromatic 692 } 693 else { 694 var d = max - min; 695 s = l > 0.5 ? d / (2 - max - min) : d / (max + min); 696 switch(max) { 697 case r: h = (g - b) / d + (g < b ? 6 : 0); break; 698 case g: h = (b - r) / d + 2; break; 699 case b: h = (r - g) / d + 4; break; 700 } 701 702 h /= 6; 703 } 704 705 return { h: h, s: s, l: l }; 706 } 707 708 // `hslToRgb` 709 // Converts an HSL color value to RGB. 710 // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100] 711 // *Returns:* { r, g, b } in the set [0, 255] 712 function hslToRgb(h, s, l) { 713 var r, g, b; 714 715 h = bound01(h, 360); 716 s = bound01(s, 100); 717 l = bound01(l, 100); 718 719 function hue2rgb(p, q, t) { 720 if(t < 0) t += 1; 721 if(t > 1) t -= 1; 722 if(t < 1/6) return p + (q - p) * 6 * t; 723 if(t < 1/2) return q; 724 if(t < 2/3) return p + (q - p) * (2/3 - t) * 6; 725 return p; 726 } 727 728 if(s === 0) { 729 r = g = b = l; // achromatic 730 } 731 else { 732 var q = l < 0.5 ? l * (1 + s) : l + s - l * s; 733 var p = 2 * l - q; 734 r = hue2rgb(p, q, h + 1/3); 735 g = hue2rgb(p, q, h); 736 b = hue2rgb(p, q, h - 1/3); 737 } 738 739 return { r: r * 255, g: g * 255, b: b * 255 }; 740 } 741 742 // `rgbToHsv` 743 // Converts an RGB color value to HSV 744 // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1] 745 // *Returns:* { h, s, v } in [0,1] 746 function rgbToHsv(r, g, b) { 747 748 r = bound01(r, 255); 749 g = bound01(g, 255); 750 b = bound01(b, 255); 751 752 var max = mathMax(r, g, b), min = mathMin(r, g, b); 753 var h, s, v = max; 754 755 var d = max - min; 756 s = max === 0 ? 0 : d / max; 757 758 if(max == min) { 759 h = 0; // achromatic 760 } 761 else { 762 switch(max) { 763 case r: h = (g - b) / d + (g < b ? 6 : 0); break; 764 case g: h = (b - r) / d + 2; break; 765 case b: h = (r - g) / d + 4; break; 766 } 767 h /= 6; 768 } 769 return { h: h, s: s, v: v }; 770 } 771 772 // `hsvToRgb` 773 // Converts an HSV color value to RGB. 774 // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100] 775 // *Returns:* { r, g, b } in the set [0, 255] 776 function hsvToRgb(h, s, v) { 777 778 h = bound01(h, 360) * 6; 779 s = bound01(s, 100); 780 v = bound01(v, 100); 781 782 var i = Math.floor(h), 783 f = h - i, 784 p = v * (1 - s), 785 q = v * (1 - f * s), 786 t = v * (1 - (1 - f) * s), 787 mod = i % 6, 788 r = [v, q, p, p, t, v][mod], 789 g = [t, v, v, q, p, p][mod], 790 b = [p, p, t, v, v, q][mod]; 791 792 return { r: r * 255, g: g * 255, b: b * 255 }; 793 } 794 795 // `rgbToHex` 796 // Converts an RGB color to hex 797 // Assumes r, g, and b are contained in the set [0, 255] 798 // Returns a 3 or 6 character hex 799 function rgbToHex(r, g, b, allow3Char) { 800 801 var hex = [ 802 pad2(mathRound(r).toString(16)), 803 pad2(mathRound(g).toString(16)), 804 pad2(mathRound(b).toString(16)) 805 ]; 806 807 // Return a 3 character hex if possible 808 if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) { 809 return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0); 810 } 811 812 return hex.join(""); 813 } 814 815 // `rgbaToHex` 816 // Converts an RGBA color plus alpha transparency to hex 817 // Assumes r, g, b are contained in the set [0, 255] and 818 // a in [0, 1]. Returns a 4 or 8 character rgba hex 819 function rgbaToHex(r, g, b, a, allow4Char) { 820 821 var hex = [ 822 pad2(mathRound(r).toString(16)), 823 pad2(mathRound(g).toString(16)), 824 pad2(mathRound(b).toString(16)), 825 pad2(convertDecimalToHex(a)) 826 ]; 827 828 // Return a 4 character hex if possible 829 if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) { 830 return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0); 831 } 832 833 return hex.join(""); 834 } 835 836 // `rgbaToArgbHex` 837 // Converts an RGBA color to an ARGB Hex8 string 838 // Rarely used, but required for "toFilter()" 839 function rgbaToArgbHex(r, g, b, a) { 840 841 var hex = [ 842 pad2(convertDecimalToHex(a)), 843 pad2(mathRound(r).toString(16)), 844 pad2(mathRound(g).toString(16)), 845 pad2(mathRound(b).toString(16)) 846 ]; 847 848 return hex.join(""); 849 } 850 851 // `equals` 852 // Can be called with any tinycolor input 853 tinycolor.equals = function (color1, color2) { 854 if (!color1 || !color2) { return false; } 855 return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString(); 856 }; 857 858 tinycolor.random = function() { 859 return tinycolor.fromRatio({ 860 r: mathRandom(), 861 g: mathRandom(), 862 b: mathRandom() 863 }); 864 }; 865 866 867 // Modification Functions 868 // ---------------------- 869 // Thanks to less.js for some of the basics here 870 // <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js> 871 872 function desaturate(color, amount) { 873 amount = (amount === 0) ? 0 : (amount || 10); 874 var hsl = tinycolor(color).toHsl(); 875 hsl.s -= amount / 100; 876 hsl.s = clamp01(hsl.s); 877 return tinycolor(hsl); 878 } 879 880 function saturate(color, amount) { 881 amount = (amount === 0) ? 0 : (amount || 10); 882 var hsl = tinycolor(color).toHsl(); 883 hsl.s += amount / 100; 884 hsl.s = clamp01(hsl.s); 885 return tinycolor(hsl); 886 } 887 888 function greyscale(color) { 889 return tinycolor(color).desaturate(100); 890 } 891 892 function lighten (color, amount) { 893 amount = (amount === 0) ? 0 : (amount || 10); 894 var hsl = tinycolor(color).toHsl(); 895 hsl.l += amount / 100; 896 hsl.l = clamp01(hsl.l); 897 return tinycolor(hsl); 898 } 899 900 function brighten(color, amount) { 901 amount = (amount === 0) ? 0 : (amount || 10); 902 var rgb = tinycolor(color).toRgb(); 903 rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100)))); 904 rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100)))); 905 rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100)))); 906 return tinycolor(rgb); 907 } 908 909 function darken (color, amount) { 910 amount = (amount === 0) ? 0 : (amount || 10); 911 var hsl = tinycolor(color).toHsl(); 912 hsl.l -= amount / 100; 913 hsl.l = clamp01(hsl.l); 914 return tinycolor(hsl); 915 } 916 917 // Spin takes a positive or negative amount within [-360, 360] indicating the change of hue. 918 // Values outside of this range will be wrapped into this range. 919 function spin(color, amount) { 920 var hsl = tinycolor(color).toHsl(); 921 var hue = (hsl.h + amount) % 360; 922 hsl.h = hue < 0 ? 360 + hue : hue; 923 return tinycolor(hsl); 924 } 925 926 // Combination Functions 927 // --------------------- 928 // Thanks to jQuery xColor for some of the ideas behind these 929 // <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js> 930 931 function complement(color) { 932 var hsl = tinycolor(color).toHsl(); 933 hsl.h = (hsl.h + 180) % 360; 934 return tinycolor(hsl); 935 } 936 937 function triad(color) { 938 var hsl = tinycolor(color).toHsl(); 939 var h = hsl.h; 940 return [ 941 tinycolor(color), 942 tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }), 943 tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l }) 944 ]; 945 } 946 947 function tetrad(color) { 948 var hsl = tinycolor(color).toHsl(); 949 var h = hsl.h; 950 return [ 951 tinycolor(color), 952 tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }), 953 tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }), 954 tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l }) 955 ]; 956 } 957 958 function splitcomplement(color) { 959 var hsl = tinycolor(color).toHsl(); 960 var h = hsl.h; 961 return [ 962 tinycolor(color), 963 tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}), 964 tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l}) 965 ]; 966 } 967 968 function analogous(color, results, slices) { 969 results = results || 6; 970 slices = slices || 30; 971 972 var hsl = tinycolor(color).toHsl(); 973 var part = 360 / slices; 974 var ret = [tinycolor(color)]; 975 976 for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) { 977 hsl.h = (hsl.h + part) % 360; 978 ret.push(tinycolor(hsl)); 979 } 980 return ret; 981 } 982 983 function monochromatic(color, results) { 984 results = results || 6; 985 var hsv = tinycolor(color).toHsv(); 986 var h = hsv.h, s = hsv.s, v = hsv.v; 987 var ret = []; 988 var modification = 1 / results; 989 990 while (results--) { 991 ret.push(tinycolor({ h: h, s: s, v: v})); 992 v = (v + modification) % 1; 993 } 994 995 return ret; 996 } 997 998 // Utility Functions 999 // --------------------- 1000 1001 tinycolor.mix = function(color1, color2, amount) { 1002 amount = (amount === 0) ? 0 : (amount || 50); 1003 1004 var rgb1 = tinycolor(color1).toRgb(); 1005 var rgb2 = tinycolor(color2).toRgb(); 1006 1007 var p = amount / 100; 1008 1009 var rgba = { 1010 r: ((rgb2.r - rgb1.r) * p) + rgb1.r, 1011 g: ((rgb2.g - rgb1.g) * p) + rgb1.g, 1012 b: ((rgb2.b - rgb1.b) * p) + rgb1.b, 1013 a: ((rgb2.a - rgb1.a) * p) + rgb1.a 1014 }; 1015 1016 return tinycolor(rgba); 1017 }; 1018 1019 1020 // Readability Functions 1021 // --------------------- 1022 // <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2) 1023 1024 // `contrast` 1025 // Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2) 1026 tinycolor.readability = function(color1, color2) { 1027 var c1 = tinycolor(color1); 1028 var c2 = tinycolor(color2); 1029 return (Math.max(c1.getLuminance(),c2.getLuminance())+0.05) / (Math.min(c1.getLuminance(),c2.getLuminance())+0.05); 1030 }; 1031 1032 // `isReadable` 1033 // Ensure that foreground and background color combinations meet WCAG2 guidelines. 1034 // The third argument is an optional Object. 1035 // the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA'; 1036 // the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'. 1037 // If the entire object is absent, isReadable defaults to {level:"AA",size:"small"}. 1038 1039 // *Example* 1040 // tinycolor.isReadable("#000", "#111") => false 1041 // tinycolor.isReadable("#000", "#111",{level:"AA",size:"large"}) => false 1042 tinycolor.isReadable = function(color1, color2, wcag2) { 1043 var readability = tinycolor.readability(color1, color2); 1044 var wcag2Parms, out; 1045 1046 out = false; 1047 1048 wcag2Parms = validateWCAG2Parms(wcag2); 1049 switch (wcag2Parms.level + wcag2Parms.size) { 1050 case "AAsmall": 1051 case "AAAlarge": 1052 out = readability >= 4.5; 1053 break; 1054 case "AAlarge": 1055 out = readability >= 3; 1056 break; 1057 case "AAAsmall": 1058 out = readability >= 7; 1059 break; 1060 } 1061 return out; 1062 1063 }; 1064 1065 // `mostReadable` 1066 // Given a base color and a list of possible foreground or background 1067 // colors for that base, returns the most readable color. 1068 // Optionally returns Black or White if the most readable color is unreadable. 1069 // *Example* 1070 // tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:false}).toHexString(); // "#112255" 1071 // tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:true}).toHexString(); // "#ffffff" 1072 // tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"large"}).toHexString(); // "#faf3f3" 1073 // tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"small"}).toHexString(); // "#ffffff" 1074 tinycolor.mostReadable = function(baseColor, colorList, args) { 1075 var bestColor = null; 1076 var bestScore = 0; 1077 var readability; 1078 var includeFallbackColors, level, size ; 1079 args = args || {}; 1080 includeFallbackColors = args.includeFallbackColors ; 1081 level = args.level; 1082 size = args.size; 1083 1084 for (var i= 0; i < colorList.length ; i++) { 1085 readability = tinycolor.readability(baseColor, colorList[i]); 1086 if (readability > bestScore) { 1087 bestScore = readability; 1088 bestColor = tinycolor(colorList[i]); 1089 } 1090 } 1091 1092 if (tinycolor.isReadable(baseColor, bestColor, {"level":level,"size":size}) || !includeFallbackColors) { 1093 return bestColor; 1094 } 1095 else { 1096 args.includeFallbackColors=false; 1097 return tinycolor.mostReadable(baseColor,["#fff", "#000"],args); 1098 } 1099 }; 1100 1101 1102 // Big List of Colors 1103 // ------------------ 1104 // <http://www.w3.org/TR/css3-color/#svg-color> 1105 var names = tinycolor.names = { 1106 aliceblue: "f0f8ff", 1107 antiquewhite: "faebd7", 1108 aqua: "0ff", 1109 aquamarine: "7fffd4", 1110 azure: "f0ffff", 1111 beige: "f5f5dc", 1112 bisque: "ffe4c4", 1113 black: "000", 1114 blanchedalmond: "ffebcd", 1115 blue: "00f", 1116 blueviolet: "8a2be2", 1117 brown: "a52a2a", 1118 burlywood: "deb887", 1119 burntsienna: "ea7e5d", 1120 cadetblue: "5f9ea0", 1121 chartreuse: "7fff00", 1122 chocolate: "d2691e", 1123 coral: "ff7f50", 1124 cornflowerblue: "6495ed", 1125 cornsilk: "fff8dc", 1126 crimson: "dc143c", 1127 cyan: "0ff", 1128 darkblue: "00008b", 1129 darkcyan: "008b8b", 1130 darkgoldenrod: "b8860b", 1131 darkgray: "a9a9a9", 1132 darkgreen: "006400", 1133 darkgrey: "a9a9a9", 1134 darkkhaki: "bdb76b", 1135 darkmagenta: "8b008b", 1136 darkolivegreen: "556b2f", 1137 darkorange: "ff8c00", 1138 darkorchid: "9932cc", 1139 darkred: "8b0000", 1140 darksalmon: "e9967a", 1141 darkseagreen: "8fbc8f", 1142 darkslateblue: "483d8b", 1143 darkslategray: "2f4f4f", 1144 darkslategrey: "2f4f4f", 1145 darkturquoise: "00ced1", 1146 darkviolet: "9400d3", 1147 deeppink: "ff1493", 1148 deepskyblue: "00bfff", 1149 dimgray: "696969", 1150 dimgrey: "696969", 1151 dodgerblue: "1e90ff", 1152 firebrick: "b22222", 1153 floralwhite: "fffaf0", 1154 forestgreen: "228b22", 1155 fuchsia: "f0f", 1156 gainsboro: "dcdcdc", 1157 ghostwhite: "f8f8ff", 1158 gold: "ffd700", 1159 goldenrod: "daa520", 1160 gray: "808080", 1161 green: "008000", 1162 greenyellow: "adff2f", 1163 grey: "808080", 1164 honeydew: "f0fff0", 1165 hotpink: "ff69b4", 1166 indianred: "cd5c5c", 1167 indigo: "4b0082", 1168 ivory: "fffff0", 1169 khaki: "f0e68c", 1170 lavender: "e6e6fa", 1171 lavenderblush: "fff0f5", 1172 lawngreen: "7cfc00", 1173 lemonchiffon: "fffacd", 1174 lightblue: "add8e6", 1175 lightcoral: "f08080", 1176 lightcyan: "e0ffff", 1177 lightgoldenrodyellow: "fafad2", 1178 lightgray: "d3d3d3", 1179 lightgreen: "90ee90", 1180 lightgrey: "d3d3d3", 1181 lightpink: "ffb6c1", 1182 lightsalmon: "ffa07a", 1183 lightseagreen: "20b2aa", 1184 lightskyblue: "87cefa", 1185 lightslategray: "789", 1186 lightslategrey: "789", 1187 lightsteelblue: "b0c4de", 1188 lightyellow: "ffffe0", 1189 lime: "0f0", 1190 limegreen: "32cd32", 1191 linen: "faf0e6", 1192 magenta: "f0f", 1193 maroon: "800000", 1194 mediumaquamarine: "66cdaa", 1195 mediumblue: "0000cd", 1196 mediumorchid: "ba55d3", 1197 mediumpurple: "9370db", 1198 mediumseagreen: "3cb371", 1199 mediumslateblue: "7b68ee", 1200 mediumspringgreen: "00fa9a", 1201 mediumturquoise: "48d1cc", 1202 mediumvioletred: "c71585", 1203 midnightblue: "191970", 1204 mintcream: "f5fffa", 1205 mistyrose: "ffe4e1", 1206 moccasin: "ffe4b5", 1207 navajowhite: "ffdead", 1208 navy: "000080", 1209 oldlace: "fdf5e6", 1210 olive: "808000", 1211 olivedrab: "6b8e23", 1212 orange: "ffa500", 1213 orangered: "ff4500", 1214 orchid: "da70d6", 1215 palegoldenrod: "eee8aa", 1216 palegreen: "98fb98", 1217 paleturquoise: "afeeee", 1218 palevioletred: "db7093", 1219 papayawhip: "ffefd5", 1220 peachpuff: "ffdab9", 1221 peru: "cd853f", 1222 pink: "ffc0cb", 1223 plum: "dda0dd", 1224 powderblue: "b0e0e6", 1225 purple: "800080", 1226 rebeccapurple: "663399", 1227 red: "f00", 1228 rosybrown: "bc8f8f", 1229 royalblue: "4169e1", 1230 saddlebrown: "8b4513", 1231 salmon: "fa8072", 1232 sandybrown: "f4a460", 1233 seagreen: "2e8b57", 1234 seashell: "fff5ee", 1235 sienna: "a0522d", 1236 silver: "c0c0c0", 1237 skyblue: "87ceeb", 1238 slateblue: "6a5acd", 1239 slategray: "708090", 1240 slategrey: "708090", 1241 snow: "fffafa", 1242 springgreen: "00ff7f", 1243 steelblue: "4682b4", 1244 tan: "d2b48c", 1245 teal: "008080", 1246 thistle: "d8bfd8", 1247 tomato: "ff6347", 1248 turquoise: "40e0d0", 1249 violet: "ee82ee", 1250 wheat: "f5deb3", 1251 white: "fff", 1252 whitesmoke: "f5f5f5", 1253 yellow: "ff0", 1254 yellowgreen: "9acd32" 1255 }; 1256 1257 // Make it easy to access colors via `hexNames[hex]` 1258 var hexNames = tinycolor.hexNames = flip(names); 1259 1260 1261 // Utilities 1262 // --------- 1263 1264 // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }` 1265 function flip(o) { 1266 var flipped = { }; 1267 for (var i in o) { 1268 if (o.hasOwnProperty(i)) { 1269 flipped[o[i]] = i; 1270 } 1271 } 1272 return flipped; 1273 } 1274 1275 // Return a valid alpha value [0,1] with all invalid values being set to 1 1276 function boundAlpha(a) { 1277 a = parseFloat(a); 1278 1279 if (isNaN(a) || a < 0 || a > 1) { 1280 a = 1; 1281 } 1282 1283 return a; 1284 } 1285 1286 // Take input from [0, n] and return it as [0, 1] 1287 function bound01(n, max) { 1288 if (isOnePointZero(n)) { n = "100%"; } 1289 1290 var processPercent = isPercentage(n); 1291 n = mathMin(max, mathMax(0, parseFloat(n))); 1292 1293 // Automatically convert percentage into number 1294 if (processPercent) { 1295 n = parseInt(n * max, 10) / 100; 1296 } 1297 1298 // Handle floating point rounding errors 1299 if ((Math.abs(n - max) < 0.000001)) { 1300 return 1; 1301 } 1302 1303 // Convert into [0, 1] range if it isn't already 1304 return (n % max) / parseFloat(max); 1305 } 1306 1307 // Force a number between 0 and 1 1308 function clamp01(val) { 1309 return mathMin(1, mathMax(0, val)); 1310 } 1311 1312 // Parse a base-16 hex value into a base-10 integer 1313 function parseIntFromHex(val) { 1314 return parseInt(val, 16); 1315 } 1316 1317 // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1 1318 // <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0> 1319 function isOnePointZero(n) { 1320 return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1; 1321 } 1322 1323 // Check to see if string passed in is a percentage 1324 function isPercentage(n) { 1325 return typeof n === "string" && n.indexOf('%') != -1; 1326 } 1327 1328 // Force a hex value to have 2 characters 1329 function pad2(c) { 1330 return c.length == 1 ? '0' + c : '' + c; 1331 } 1332 1333 // Replace a decimal with it's percentage value 1334 function convertToPercentage(n) { 1335 if (n <= 1) { 1336 n = (n * 100) + "%"; 1337 } 1338 1339 return n; 1340 } 1341 1342 // Converts a decimal to a hex value 1343 function convertDecimalToHex(d) { 1344 return Math.round(parseFloat(d) * 255).toString(16); 1345 } 1346 // Converts a hex value to a decimal 1347 function convertHexToDecimal(h) { 1348 return (parseIntFromHex(h) / 255); 1349 } 1350 1351 var matchers = (function() { 1352 1353 // <http://www.w3.org/TR/css3-values/#integers> 1354 var CSS_INTEGER = "[-\\+]?\\d+%?"; 1355 1356 // <http://www.w3.org/TR/css3-values/#number-value> 1357 var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?"; 1358 1359 // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome. 1360 var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")"; 1361 1362 // Actual matching. 1363 // Parentheses and commas are optional, but not required. 1364 // Whitespace can take the place of commas or opening paren 1365 var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; 1366 var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; 1367 1368 return { 1369 CSS_UNIT: new RegExp(CSS_UNIT), 1370 rgb: new RegExp("rgb" + PERMISSIVE_MATCH3), 1371 rgba: new RegExp("rgba" + PERMISSIVE_MATCH4), 1372 hsl: new RegExp("hsl" + PERMISSIVE_MATCH3), 1373 hsla: new RegExp("hsla" + PERMISSIVE_MATCH4), 1374 hsv: new RegExp("hsv" + PERMISSIVE_MATCH3), 1375 hsva: new RegExp("hsva" + PERMISSIVE_MATCH4), 1376 hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, 1377 hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, 1378 hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, 1379 hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/ 1380 }; 1381 })(); 1382 1383 // `isValidCSSUnit` 1384 // Take in a single string / number and check to see if it looks like a CSS unit 1385 // (see `matchers` above for definition). 1386 function isValidCSSUnit(color) { 1387 return !!matchers.CSS_UNIT.exec(color); 1388 } 1389 1390 // `stringInputToObject` 1391 // Permissive string parsing. Take in a number of formats, and output an object 1392 // based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}` 1393 function stringInputToObject(color) { 1394 1395 color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase(); 1396 var named = false; 1397 if (names[color]) { 1398 color = names[color]; 1399 named = true; 1400 } 1401 else if (color == 'transparent') { 1402 return { r: 0, g: 0, b: 0, a: 0, format: "name" }; 1403 } 1404 1405 // Try to match string input using regular expressions. 1406 // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360] 1407 // Just return an object and let the conversion functions handle that. 1408 // This way the result will be the same whether the tinycolor is initialized with string or object. 1409 var match; 1410 if ((match = matchers.rgb.exec(color))) { 1411 return { r: match[1], g: match[2], b: match[3] }; 1412 } 1413 if ((match = matchers.rgba.exec(color))) { 1414 return { r: match[1], g: match[2], b: match[3], a: match[4] }; 1415 } 1416 if ((match = matchers.hsl.exec(color))) { 1417 return { h: match[1], s: match[2], l: match[3] }; 1418 } 1419 if ((match = matchers.hsla.exec(color))) { 1420 return { h: match[1], s: match[2], l: match[3], a: match[4] }; 1421 } 1422 if ((match = matchers.hsv.exec(color))) { 1423 return { h: match[1], s: match[2], v: match[3] }; 1424 } 1425 if ((match = matchers.hsva.exec(color))) { 1426 return { h: match[1], s: match[2], v: match[3], a: match[4] }; 1427 } 1428 if ((match = matchers.hex8.exec(color))) { 1429 return { 1430 r: parseIntFromHex(match[1]), 1431 g: parseIntFromHex(match[2]), 1432 b: parseIntFromHex(match[3]), 1433 a: convertHexToDecimal(match[4]), 1434 format: named ? "name" : "hex8" 1435 }; 1436 } 1437 if ((match = matchers.hex6.exec(color))) { 1438 return { 1439 r: parseIntFromHex(match[1]), 1440 g: parseIntFromHex(match[2]), 1441 b: parseIntFromHex(match[3]), 1442 format: named ? "name" : "hex" 1443 }; 1444 } 1445 if ((match = matchers.hex4.exec(color))) { 1446 return { 1447 r: parseIntFromHex(match[1] + '' + match[1]), 1448 g: parseIntFromHex(match[2] + '' + match[2]), 1449 b: parseIntFromHex(match[3] + '' + match[3]), 1450 a: convertHexToDecimal(match[4] + '' + match[4]), 1451 format: named ? "name" : "hex8" 1452 }; 1453 } 1454 if ((match = matchers.hex3.exec(color))) { 1455 return { 1456 r: parseIntFromHex(match[1] + '' + match[1]), 1457 g: parseIntFromHex(match[2] + '' + match[2]), 1458 b: parseIntFromHex(match[3] + '' + match[3]), 1459 format: named ? "name" : "hex" 1460 }; 1461 } 1462 1463 return false; 1464 } 1465 1466 function validateWCAG2Parms(parms) { 1467 // return valid WCAG2 parms for isReadable. 1468 // If input parms are invalid, return {"level":"AA", "size":"small"} 1469 var level, size; 1470 parms = parms || {"level":"AA", "size":"small"}; 1471 level = (parms.level || "AA").toUpperCase(); 1472 size = (parms.size || "small").toLowerCase(); 1473 if (level !== "AA" && level !== "AAA") { 1474 level = "AA"; 1475 } 1476 if (size !== "small" && size !== "large") { 1477 size = "small"; 1478 } 1479 return {"level":level, "size":size}; 1480 } 1481 1482 // Node: Export function 1483 if ( true && module.exports) { 1484 module.exports = tinycolor; 1485 } 1486 // AMD/requirejs: Define the module 1487 else if (true) { 1488 !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {return tinycolor;}).call(exports, __webpack_require__, exports, module), 1489 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 1490 } 1491 // Browser: Expose to window 1492 else {} 1493 1494 })(Math); 1495 1496 1497 /***/ }), 1498 1499 /***/ "./src/grid-layout-basic.js": 1500 /*!**********************************!*\ 1501 !*** ./src/grid-layout-basic.js ***! 1502 \**********************************/ 1503 /*! exports provided: name, settings */ 1504 /***/ (function(module, __webpack_exports__, __webpack_require__) { 1505 1506 "use strict"; 1507 __webpack_require__.r(__webpack_exports__); 1508 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "name", function() { return name; }); 1509 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settings", function() { return settings; }); 1510 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); 1511 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); 1512 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); 1513 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); 1514 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); 1515 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__); 1516 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 1517 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_3__); 1518 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); 1519 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__); 1520 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/editor */ "@wordpress/editor"); 1521 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__); 1522 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); 1523 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_6__); 1524 1525 1526 /** 1527 * WordPress dependencies 1528 */ 1529 1530 1531 1532 1533 1534 1535 var name = 'gecko/grid-layout-basic'; 1536 var settings = { 1537 title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Basic'), 1538 parent: ['gecko/grid-layout'], 1539 icon: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["SVG"], { 1540 viewBox: "0 0 24 24", 1541 xmlns: "http://www.w3.org/2000/svg" 1542 }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Path"], { 1543 d: "M0,0h24v24H0V0z M0,0h24v24H0V0z", 1544 fill: "none" 1545 }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Path"], { 1546 d: "m20 7v10h-16v-10h16m0-2h-16c-1.1 0-1.99 0.9-1.99 2l-0.01 10c0 1.1 0.9 2 2 2h16c1.1 0 2-0.9 2-2v-10c0-1.1-0.9-2-2-2z" 1547 }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Rect"], { 1548 x: "11", 1549 y: "8", 1550 width: "2", 1551 height: "2" 1552 }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Rect"], { 1553 x: "11", 1554 y: "11", 1555 width: "2", 1556 height: "2" 1557 }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Rect"], { 1558 x: "8", 1559 y: "8", 1560 width: "2", 1561 height: "2" 1562 }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Rect"], { 1563 x: "8", 1564 y: "11", 1565 width: "2", 1566 height: "2" 1567 }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Rect"], { 1568 x: "5", 1569 y: "11", 1570 width: "2", 1571 height: "2" 1572 }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Rect"], { 1573 x: "5", 1574 y: "8", 1575 width: "2", 1576 height: "2" 1577 }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Rect"], { 1578 x: "8", 1579 y: "14", 1580 width: "8", 1581 height: "2" 1582 }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Rect"], { 1583 x: "14", 1584 y: "11", 1585 width: "2", 1586 height: "2" 1587 }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Rect"], { 1588 x: "14", 1589 y: "8", 1590 width: "2", 1591 height: "2" 1592 }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Rect"], { 1593 x: "17", 1594 y: "11", 1595 width: "2", 1596 height: "2" 1597 }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Rect"], { 1598 x: "17", 1599 y: "8", 1600 width: "2", 1601 height: "2" 1602 })), 1603 description: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('An image Grid Block.'), 1604 category: 'common', 1605 supports: { 1606 className: true, 1607 inserter: true, 1608 reusable: false, 1609 html: false 1610 }, 1611 styles: [{ 1612 name: 'default', 1613 label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Default'), 1614 isDefault: true 1615 }], 1616 attributes: { 1617 h: { 1618 type: 'number', 1619 default: 1 1620 }, 1621 w: { 1622 type: 'number', 1623 default: 1 1624 } 1625 }, 1626 transforms: { 1627 from: [{ 1628 type: 'block', 1629 blocks: ['gecko/grid-layout-item', 'gecko/grid-layout-image'], 1630 transform: function transform(attributes, innerBlocks) { 1631 var selected = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_6__["select"])('core/editor').getSelectedBlock(); // because innerBlocks does not work. 1632 // It appears that innerBlocks will be added in the future. 1633 1634 var h = attributes.h, 1635 w = attributes.w; 1636 return Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__["createBlock"])('gecko/grid-layout-basic', { 1637 h: h, 1638 w: w 1639 }, selected.innerBlocks); 1640 } 1641 }] 1642 }, 1643 deprecated: [{ 1644 migrate: function migrate() {}, 1645 save: function save() { 1646 return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"].Content, null); 1647 } 1648 }], 1649 edit: function edit(_ref) { 1650 var attributes = _ref.attributes, 1651 setAttributes = _ref.setAttributes, 1652 className = _ref.className, 1653 insertBlocksAfter = _ref.insertBlocksAfter; 1654 var h = attributes.h, 1655 w = attributes.w; 1656 var styles = { 1657 gridColumnEnd: 'span ' + w, 1658 gridRowEnd: 'span ' + h 1659 }; 1660 return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_element__WEBPACK_IMPORTED_MODULE_3__["Fragment"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InspectorControls"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["PanelBody"], { 1661 title: "Grid Item" 1662 }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["RangeControl"], { 1663 label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Width'), 1664 value: w, 1665 onChange: function onChange(next) { 1666 setAttributes({ 1667 w: next 1668 }); 1669 }, 1670 min: 1, 1671 max: 12 1672 }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["RangeControl"], { 1673 label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Span Rows'), 1674 value: h, 1675 onChange: function onChange(next) { 1676 setAttributes({ 1677 h: next 1678 }); 1679 }, 1680 min: 1, 1681 max: 12 1682 }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { 1683 className: "gecko-grid-layout-editor-styles", 1684 style: styles 1685 }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { 1686 className: "wp-block-gecko-grid-layout-editor__wrap gecko-grid-layout-basic ".concat(attributes.className) 1687 }, typeof insertBlocksAfter === 'function' //This line makes sure styles do not break 1688 ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"], { 1689 templateLock: false 1690 }) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, "Lorem Ipsum") // This is what shows as the preview content. 1691 )); 1692 }, 1693 save: function save() { 1694 return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"].Content, null)); // Honestly I don't want to do this but conventions are conventions. 1695 } 1696 }; 1697 1698 /***/ }), 1699 1700 /***/ "./src/grid-layout-image.js": 1701 /*!**********************************!*\ 1702 !*** ./src/grid-layout-image.js ***! 1703 \**********************************/ 1704 /*! exports provided: name, settings */ 1705 /***/ (function(module, __webpack_exports__, __webpack_require__) { 1706 1707 "use strict"; 1708 __webpack_require__.r(__webpack_exports__); 1709 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "name", function() { return name; }); 1710 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settings", function() { return settings; }); 1711 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); 1712 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); 1713 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); 1714 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); 1715 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); 1716 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__); 1717 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 1718 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_3__); 1719 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); 1720 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__); 1721 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/editor */ "@wordpress/editor"); 1722 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__); 1723 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); 1724 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_6__); 1725 1726 1727 /** 1728 * WordPress dependencies 1729 */ 1730 1731 1732 1733 1734 1735 1736 var ALLOWED_BLOCKS = ['core/paragraph', 'core/heading', 'core/button', 'core/list', 'core/quote']; 1737 var name = 'gecko/grid-layout-image'; 1738 var settings = { 1739 title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Image'), 1740 parent: ['gecko/grid-layout'], 1741 icon: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["SVG"], { 1742 viewBox: "0 0 24 24", 1743 xmlns: "http://www.w3.org/2000/svg" 1744 }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Path"], { 1745 d: "M0,0h24v24H0V0z", 1746 fill: "none" 1747 }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Path"], { 1748 d: "m19 5v14h-14v-14h14m0-2h-14c-1.1 0-2 0.9-2 2v14c0 1.1 0.9 2 2 2h14c1.1 0 2-0.9 2-2v-14c0-1.1-0.9-2-2-2z" 1749 }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Path"], { 1750 d: "m14.14 11.86l-3 3.87-2.14-2.59-3 3.86h12l-3.86-5.14z" 1751 })), 1752 description: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('An image Grid Block.'), 1753 category: 'common', 1754 supports: { 1755 className: true, 1756 inserter: true, 1757 reusable: false, 1758 html: false 1759 }, 1760 styles: [{ 1761 name: 'default', 1762 label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Default'), 1763 isDefault: true 1764 }, { 1765 name: 'hover', 1766 label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Hover') 1767 }, { 1768 name: 'no-caption', 1769 label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('No Caption') 1770 }], 1771 attributes: { 1772 h: { 1773 type: 'number', 1774 default: 1 1775 }, 1776 w: { 1777 type: 'number', 1778 default: 1 1779 }, 1780 minHeight: { 1781 type: 'number', 1782 default: 200 1783 }, 1784 imgId: { 1785 type: 'number' 1786 }, 1787 imgUrl: { 1788 type: 'string' 1789 } 1790 }, 1791 transforms: { 1792 from: [{ 1793 type: 'block', 1794 blocks: ['gecko/grid-layout-item', 'gecko/grid-layout-basic'], 1795 transform: function transform(attributes, innerBlocks) { 1796 var selected = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_6__["select"])('core/editor').getSelectedBlock(); // because innerBlocks does not work. 1797 // It appears that innerBlocks will be added in the future. 1798 1799 var h = attributes.h, 1800 w = attributes.w, 1801 bgMedia = attributes.bgMedia, 1802 bgMediaUrl = attributes.bgMediaUrl, 1803 mediaId = attributes.mediaId, 1804 mediaUrl = attributes.mediaUrl, 1805 minHeight = attributes.minHeight; 1806 return Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__["createBlock"])('gecko/grid-layout-image', { 1807 h: h, 1808 w: w, 1809 imgId: bgMedia || mediaId, 1810 imgUrl: bgMediaUrl || mediaUrl, 1811 minHeight: minHeight 1812 }, selected.innerBlocks); 1813 } 1814 }] 1815 }, 1816 deprecated: [{ 1817 migrate: function migrate() {}, 1818 save: function save() { 1819 return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"].Content, null); 1820 } 1821 }], 1822 edit: function edit(_ref) { 1823 var attributes = _ref.attributes, 1824 setAttributes = _ref.setAttributes, 1825 className = _ref.className, 1826 insertBlocksAfter = _ref.insertBlocksAfter; 1827 var h = attributes.h, 1828 w = attributes.w, 1829 imgId = attributes.imgId, 1830 imgUrl = attributes.imgUrl, 1831 minHeight = attributes.minHeight; 1832 var styles = { 1833 gridColumnEnd: 'span ' + w, 1834 gridRowEnd: 'span ' + h, 1835 minHeight: minHeight + 'px' 1836 }; 1837 return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_element__WEBPACK_IMPORTED_MODULE_3__["Fragment"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InspectorControls"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["PanelBody"], { 1838 title: "Grid Item" 1839 }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["RangeControl"], { 1840 label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Minimum Height'), 1841 value: minHeight, 1842 onChange: function onChange(next) { 1843 setAttributes({ 1844 minHeight: next 1845 }); 1846 }, 1847 min: "50", 1848 max: "600", 1849 step: "1" 1850 }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["RangeControl"], { 1851 label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Width'), 1852 value: w, 1853 onChange: function onChange(next) { 1854 setAttributes({ 1855 w: next 1856 }); 1857 }, 1858 min: 1, 1859 max: 12 1860 }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["RangeControl"], { 1861 label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Span Rows'), 1862 value: h, 1863 onChange: function onChange(next) { 1864 setAttributes({ 1865 h: next 1866 }); 1867 }, 1868 min: 1, 1869 max: 12 1870 }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["BlockControls"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Toolbar"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["MediaUpload"], { 1871 onSelect: function onSelect(value) { 1872 // console.log(value); 1873 setAttributes({ 1874 imgId: value.id, 1875 imgUrl: value.url 1876 }); 1877 }, 1878 type: ['image'], 1879 value: imgId ? imgId : null, 1880 render: function render(_ref2) { 1881 var open = _ref2.open; 1882 return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["IconButton"], { 1883 className: "components-icon-button components-toolbar__control", 1884 label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Edit image'), 1885 onClick: open, 1886 icon: "edit" 1887 }); 1888 } 1889 }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { 1890 className: "gecko-grid-layout-editor-styles", 1891 style: styles 1892 }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("figure", { 1893 className: "wp-block-gecko-grid-layout-editor__wrap gecko-grid-layout-image ".concat(attributes.className) 1894 }, !imgId && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["MediaPlaceholder"], { 1895 onSelect: function onSelect(value) { 1896 setAttributes({ 1897 imgId: value.id, 1898 imgUrl: value.url 1899 }); 1900 }, 1901 allowedTypes: ['image'], 1902 accept: "image/*" 1903 }), imgUrl && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", { 1904 className: "gecko-grid-layout-image__image", 1905 src: imgUrl 1906 }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("figcaption", { 1907 className: "gecko-grid-layout-image__caption" 1908 }, typeof insertBlocksAfter === 'function' //This line makes sure styles do not break 1909 ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"], { 1910 templateLock: false, 1911 allowedBlocks: ALLOWED_BLOCKS 1912 }) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, "Lorem Ipsum") // This is what shows as the preview content. 1913 ))); 1914 }, 1915 save: function save() { 1916 return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"].Content, null)); // Honestly I don't want to do this but conventions are conventions. 1917 } 1918 }; 1919 1920 /***/ }), 1921 1922 /***/ "./src/grid-layout-item.js": 1923 /*!*********************************!*\ 1924 !*** ./src/grid-layout-item.js ***! 1925 \*********************************/ 1926 /*! exports provided: name, settings */ 1927 /***/ (function(module, __webpack_exports__, __webpack_require__) { 1928 1929 "use strict"; 1930 __webpack_require__.r(__webpack_exports__); 1931 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "name", function() { return name; }); 1932 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settings", function() { return settings; }); 1933 /* harmony import */ var tinycolor2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tinycolor2 */ "./node_modules/tinycolor2/tinycolor.js"); 1934 /* harmony import */ var tinycolor2__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(tinycolor2__WEBPACK_IMPORTED_MODULE_0__); 1935 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); 1936 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); 1937 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); 1938 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__); 1939 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 1940 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_3__); 1941 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); 1942 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__); 1943 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/editor */ "@wordpress/editor"); 1944 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__); 1945 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); 1946 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_6__); 1947 1948 /** 1949 * WordPress dependencies 1950 */ 1951 1952 1953 1954 1955 1956 1957 1958 var name = 'gecko/grid-layout-item'; 1959 var settings = { 1960 title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Experimental (Do Not Use)'), 1961 parent: ['gecko/grid-layout'], 1962 icon: React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["SVG"], { 1963 xmlns: "http://www.w3.org/2000/svg", 1964 viewBox: "0 0 24 24" 1965 }, React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Path"], { 1966 fill: "none", 1967 d: "M0 0h24v24H0V0z" 1968 }), React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Path"], { 1969 d: "M11.99 18.54l-7.37-5.73L3 14.07l9 7 9-7-1.63-1.27zM12 16l7.36-5.73L21 9l-9-7-9 7 1.63 1.27L12 16zm0-11.47L17.74 9 12 13.47 6.26 9 12 4.53z" 1970 })), 1971 description: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('A single grid item within a grid block.'), 1972 category: 'common', 1973 supports: { 1974 className: true, 1975 inserter: true, 1976 reusable: false, 1977 html: false 1978 }, 1979 styles: [{ 1980 name: 'default', 1981 label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Default'), 1982 isDefault: true 1983 }, { 1984 name: 'hover', 1985 label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Hover') 1986 }], 1987 attributes: { 1988 type: { 1989 type: 'string', 1990 default: undefined 1991 }, 1992 //solid, image, image-content 1993 // theme:{ type: 'string',default: undefined, }, //light, dark 1994 // borderRadius: { type: 'number'}, 1995 // border: { type: 'object'}, 1996 // boxShadow: { type: 'object'}, 1997 // padding: { type: 'string'}, // t b l r ui '5px 10px' '5px 10px 5px' 1998 // margin: { type: 'object'}, // t b l r ui 1999 // alignContent: { type: 'string'}, // normal, start, end, center 2000 // justifyContent: { type: 'string'}, // normal, start, end, center 2001 // backgroundImage: { type: 'string'}, // process for creating bg images 2002 // backgroundRepeat: { type: 'string'}, // no-repeat, repeat, repeat-x, repeat-y 2003 // backgroundSize: { type: 'string'}, // cover,contain,auto 2004 // backgroundColor: { type: 'string'}, 2005 h: { 2006 type: 'number', 2007 default: 1 2008 }, 2009 w: { 2010 type: 'number' 2011 }, 2012 minHeight: { 2013 type: 'number', 2014 default: 200 2015 }, 2016 opacity: { 2017 type: 'number', 2018 default: 1 2019 }, 2020 bgMedia: { 2021 type: 'number' 2022 }, 2023 bgMediaUrl: { 2024 type: 'string' 2025 }, 2026 bgColor: { 2027 type: 'string' 2028 }, 2029 bgColorSlug: { 2030 type: 'string' 2031 }, 2032 bgColorBrightness: { 2033 type: 'number' 2034 } //light or dark 2035 2036 }, 2037 transforms: { 2038 from: [{ 2039 type: 'block', 2040 blocks: ['gecko/grid-layout-image', 'gecko/grid-layout-basic'], 2041 transform: function transform(attributes, innerBlocks) { 2042 var selected = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_6__["select"])('core/editor').getSelectedBlock(); // because innerBlocks does not work. 2043 // It appears that innerBlocks will be added in the future. 2044 2045 var h = attributes.h, 2046 w = attributes.w, 2047 imgId = attributes.imgId, 2048 imgUrl = attributes.imgUrl, 2049 mediaId = attributes.mediaId, 2050 mediaUrl = attributes.mediaUrl, 2051 minHeight = attributes.minHeight; 2052 return Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__["createBlock"])('gecko/grid-layout-item', { 2053 h: h, 2054 w: w, 2055 bgMedia: imgId || mediaId, 2056 bgMediaUrl: imgUrl || mediaUrl, 2057 minHeight: minHeight 2058 }, selected.innerBlocks); 2059 } 2060 }] 2061 }, 2062 deprecated: [{ 2063 migrate: function migrate() {}, 2064 save: function save() { 2065 return React.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"].Content, null); 2066 } 2067 }], 2068 edit: function edit(_ref) { 2069 var attributes = _ref.attributes, 2070 setAttributes = _ref.setAttributes, 2071 className = _ref.className, 2072 insertBlocksAfter = _ref.insertBlocksAfter; 2073 var opacity = attributes.opacity, 2074 h = attributes.h, 2075 w = attributes.w, 2076 type = attributes.type, 2077 padding = attributes.padding, 2078 bgMedia = attributes.bgMedia, 2079 bgMediaUrl = attributes.bgMediaUrl, 2080 bgColor = attributes.bgColor, 2081 bgColorBrightness = attributes.bgColorBrightness, 2082 bgColorSlug = attributes.bgColorSlug, 2083 minHeight = attributes.minHeight; 2084 var styles = { 2085 '--background': bgColor, 2086 '--opacity': opacity, 2087 gridColumnEnd: 'span ' + w, 2088 gridRowEnd: 'span ' + h, 2089 backgroundColor: bgColor, 2090 backgroundImage: 'url(' + bgMediaUrl + ')', 2091 minHeight: minHeight + 'px' 2092 }; 2093 var lightOrDark = 'light'; 2094 if (bgColorBrightness < 130) lightOrDark = 'dark'; 2095 return React.createElement(_wordpress_element__WEBPACK_IMPORTED_MODULE_3__["Fragment"], null, React.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InspectorControls"], null, React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["PanelBody"], { 2096 title: "Settings" 2097 }, React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["RangeControl"], { 2098 label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Width'), 2099 value: w, 2100 onChange: function onChange(next) { 2101 setAttributes({ 2102 w: next 2103 }); 2104 }, 2105 min: 1, 2106 max: 12 2107 }), React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["RangeControl"], { 2108 label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Span Rows'), 2109 value: h, 2110 onChange: function onChange(next) { 2111 setAttributes({ 2112 h: next 2113 }); 2114 }, 2115 min: 1, 2116 max: 12 2117 })), React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["PanelBody"], { 2118 title: "Style" 2119 }, React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["RangeControl"], { 2120 label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Minimum Height'), 2121 value: minHeight, 2122 onChange: function onChange(next) { 2123 setAttributes({ 2124 minHeight: next 2125 }); 2126 }, 2127 min: "50", 2128 max: "600", 2129 step: "1" 2130 }), type !== "solid" && React.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["MediaUpload"], { 2131 onSelect: function onSelect(value) { 2132 // console.log(value); 2133 setAttributes({ 2134 bgMedia: value.id, 2135 bgMediaUrl: value.url 2136 }); 2137 }, 2138 type: ['image', 'video'], 2139 value: bgMedia ? bgMedia : null, 2140 render: function render(_ref2) { 2141 var open = _ref2.open; 2142 return React.createElement("div", null, bgMediaUrl && React.createElement("img", { 2143 src: bgMediaUrl, 2144 onClick: open, 2145 width: "100%", 2146 height: "auto", 2147 style: { 2148 cursor: "pointer" 2149 } 2150 }), !bgMediaUrl && React.createElement("div", { 2151 className: 'button button-large', 2152 onClick: open 2153 }, "Choose Background")); 2154 } 2155 }), React.createElement("hr", null), React.createElement("div", null, React.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["ColorPalette"], { 2156 label: "Background Color", 2157 value: bgColor ? bgColor.color : undefined, 2158 onChange: function onChange(value) { 2159 var settings = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_6__["select"])('core/editor').getEditorSettings(); 2160 var colorSlug = value ? Object(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["getColorObjectByColorValue"])(settings.colors, value).slug : undefined; 2161 setAttributes({ 2162 bgColorSlug: colorSlug 2163 }); 2164 var brightness = value ? tinycolor2__WEBPACK_IMPORTED_MODULE_0___default()(value).getBrightness() : undefined; 2165 setAttributes({ 2166 bgColorBrightness: brightness 2167 }); 2168 setAttributes({ 2169 bgColor: value 2170 }); 2171 } 2172 }), React.createElement("hr", null)))), React.createElement("div", { 2173 className: "gecko-grid-layout-editor-styles", 2174 style: styles 2175 }), React.createElement("div", { 2176 className: "wp-block-gecko-grid-layout-editor__wrap".concat(type, " ").concat(attributes.className, " has-").concat(bgColorSlug, "-background-color is-").concat(lightOrDark, "-background") 2177 }, (type === 'image' || type === 'image-content') && !bgMedia && React.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["MediaPlaceholder"], { 2178 onSelect: function onSelect(value) { 2179 setAttributes({ 2180 bgMedia: value.id, 2181 bgMediaUrl: value.url 2182 }); 2183 }, 2184 allowedTypes: ['image'], 2185 accept: "image/*" 2186 }), typeof insertBlocksAfter === 'function' && //This line makes sure styles do not break 2187 React.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"], { 2188 templateLock: false 2189 }))); 2190 }, 2191 save: function save() { 2192 return React.createElement("div", null, React.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"].Content, null)); // Honestly I don't want to do this but conventions are conventions. 2193 } 2194 }; 2195 2196 /***/ }), 2197 2198 /***/ "./src/grid-layout.js": 2199 /*!****************************!*\ 2200 !*** ./src/grid-layout.js ***! 2201 \****************************/ 2202 /*! exports provided: name, settings */ 2203 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2204 2205 "use strict"; 2206 __webpack_require__.r(__webpack_exports__); 2207 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "name", function() { return name; }); 2208 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settings", function() { return settings; }); 2209 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); 2210 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); 2211 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); 2212 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); 2213 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 2214 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__); 2215 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/editor */ "@wordpress/editor"); 2216 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_editor__WEBPACK_IMPORTED_MODULE_3__); 2217 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); 2218 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__); 2219 /* harmony import */ var _template_select__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./template-select */ "./src/template-select.js"); 2220 /** 2221 * WordPress dependencies 2222 */ 2223 2224 2225 2226 2227 2228 2229 /** 2230 * Allowed blocks constant is passed to InnerBlocks precisely as specified here. 2231 * The contents of the array should never change. 2232 * The array should contain the name of each block that is allowed. 2233 * In columns block, the only block we allow is 'dmp/grid-item'. 2234 * 2235 * @constant 2236 * @type {string[]} 2237 */ 2238 2239 var ALLOWED_BLOCKS = ['gecko/grid-layout-item', 'gecko/grid-layout-image', 'gecko/grid-layout-basic']; 2240 var name = 'gecko/grid-layout'; 2241 var settings = { 2242 title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__["__"])('Grid'), 2243 icon: React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["SVG"], { 2244 viewBox: "0 0 24 24", 2245 xmlns: "http://www.w3.org/2000/svg" 2246 }, React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Path"], { 2247 fill: "none", 2248 d: "M0 0h24v24H0V0z" 2249 }), React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["G"], null, React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Path"], { 2250 d: "M4,13 L8,13 L8,10 L4,10 L4,13 Z M4,15 L4,18 L8,18 L8,15 L4,15 Z M10,13 L14,13 L14,10 L10,10 L10,13 Z M10,15 L10,18 L14,18 L14,15 L10,15 Z M20,13 L20,10 L16,10 L16,13 L20,13 Z M20,15 L16,15 L16,18 L20,18 L20,15 Z M4,8 L8,8 L8,5 L4,5 L4,8 Z M10,8 L14,8 L14,5 L10,5 L10,8 Z M20,8 L20,5 L16,5 L16,8 L20,8 Z M4,3 L20,3 C21.1045695,3 22,3.95139491 22,5.125 L22,17.875 C22,19.0486051 21.1045695,20 20,20 L4,20 C2.8954305,20 2,19.0486051 2,17.875 L2,5.125 C2,3.95139491 2.8954305,3 4,3 Z" 2251 }))), 2252 category: 'layout', 2253 description: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__["__"])('Use CSS Grid to build layouts and, then add whatever content blocks you’d like.'), 2254 supports: { 2255 align: ['wide', 'full'], 2256 html: false 2257 }, 2258 deprecated: [{ 2259 migrate: function migrate() {}, 2260 save: function save() { 2261 return React.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_3__["InnerBlocks"].Content, null); 2262 } 2263 }], 2264 styles: [{ 2265 name: 'default', 2266 label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__["__"])('Default'), 2267 isDefault: true 2268 }, { 2269 name: 'no-gap', 2270 label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__["__"])('No Gap') 2271 }], 2272 edit: function edit(_ref) { 2273 var attributes = _ref.attributes, 2274 setAttributes = _ref.setAttributes, 2275 insertBlocksAfter = _ref.insertBlocksAfter, 2276 clientId = _ref.clientId; 2277 var block = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/editor').getBlocksByClientId(clientId)[0]; 2278 var hasInnerBlocks = block && block.innerBlocks ? block.innerBlocks.length > 0 : false; 2279 return React.createElement(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["Fragment"], null, React.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_3__["InspectorControls"], null, React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["PanelBody"], null)), React.createElement("div", { 2280 className: "wp-block-gecko-grid-layout-editor" 2281 }, typeof insertBlocksAfter === 'function' ? React.createElement(_template_select__WEBPACK_IMPORTED_MODULE_5__["default"], { 2282 hasInnnerBlocks: hasInnerBlocks, 2283 allowedBlocks: ALLOWED_BLOCKS 2284 }) : React.createElement("p", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__["__"])('Preview Not Available')))); 2285 }, 2286 save: function save() { 2287 return React.createElement("div", null, React.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_3__["InnerBlocks"].Content, null)); // Honestly I don't want to do this but conventions are conventions. 2288 } 2289 }; 2290 2291 /***/ }), 2292 2293 /***/ "./src/index.js": 2294 /*!**********************!*\ 2295 !*** ./src/index.js ***! 2296 \**********************/ 2297 /*! no exports provided */ 2298 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2299 2300 "use strict"; 2301 __webpack_require__.r(__webpack_exports__); 2302 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); 2303 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__); 2304 /* harmony import */ var _grid_layout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./grid-layout */ "./src/grid-layout.js"); 2305 /* harmony import */ var _grid_layout_item__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./grid-layout-item */ "./src/grid-layout-item.js"); 2306 /* harmony import */ var _grid_layout_image__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./grid-layout-image */ "./src/grid-layout-image.js"); 2307 /* harmony import */ var _grid_layout_basic__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./grid-layout-basic */ "./src/grid-layout-basic.js"); 2308 /** 2309 * WordPress dependencies 2310 */ 2311 2312 /** 2313 * Internal dependencies 2314 */ 2315 2316 2317 2318 2319 2320 Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__["registerBlockType"])(_grid_layout__WEBPACK_IMPORTED_MODULE_1__["name"], _grid_layout__WEBPACK_IMPORTED_MODULE_1__["settings"]); 2321 Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__["registerBlockType"])(_grid_layout_basic__WEBPACK_IMPORTED_MODULE_4__["name"], _grid_layout_basic__WEBPACK_IMPORTED_MODULE_4__["settings"]); 2322 Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__["registerBlockType"])(_grid_layout_image__WEBPACK_IMPORTED_MODULE_3__["name"], _grid_layout_image__WEBPACK_IMPORTED_MODULE_3__["settings"]); 2323 Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__["registerBlockType"])(_grid_layout_item__WEBPACK_IMPORTED_MODULE_2__["name"], _grid_layout_item__WEBPACK_IMPORTED_MODULE_2__["settings"]); 2324 /** 2325 * This make sure the grid works in the editor. 2326 */ 2327 // document.addEventListener("DOMContentLoaded", function () { 2328 // function updateContainer() { 2329 // const container = document.querySelector('.gecko-grid-slider'); 2330 // if (container) { 2331 // function listenForAppendedNodes() { 2332 // // listen for child blocks being added to layout 2333 // const layout = document.querySelector('.editor-block-list__layout'); 2334 // const observerConfig = { 2335 // childList: true, 2336 // subtree: true 2337 // }; 2338 // const observer = new MutationObserver((mutationList) => { 2339 // for (const mutation of mutationList) { 2340 // if (mutation.type === 'childList' && mutation.addedNodes.length) { 2341 // const childBlocks = container.querySelectorAll('[data-type="gecko/grid-slider-grid-slide"]'); 2342 // listenForBlockChanges(childBlocks); 2343 // } 2344 // } 2345 // }); 2346 // observer.observe(layout, observerConfig); 2347 // } 2348 // function listenForBlockChanges(blocks) { 2349 // for (const block of blocks) { 2350 // // console.log('block', block) 2351 // const observerConfig = { 2352 // attributes: true, 2353 // attributeFilter: ['style', 'data-bg'] 2354 // }; 2355 // // Find the slide that has the attributes 2356 // const slide = block.querySelector('.gecko-grid-slider__slide'); 2357 // // Initialize block styles 2358 // const styles = slide.getAttribute('style'); 2359 // block.style = styles; 2360 // // Listen for slide style changes 2361 // const observer = new MutationObserver((mutationList) => { 2362 // for (const mutation of mutationList) { 2363 // console.log('mutation 2 occured'); 2364 // if (mutation.attributeName === 'style') { 2365 // const styles = mutation.target.getAttribute('style'); 2366 // block.style = styles; 2367 // } 2368 // } 2369 // }); 2370 // observer.observe(slide, observerConfig); 2371 // } 2372 // } 2373 // listenForAppendedNodes(); 2374 // let childBlocks = container.querySelectorAll('[data-type="gecko/grid-slider-grid-slide"]'); 2375 // listenForBlockChanges(childBlocks); 2376 // } 2377 // } 2378 // updateContainer(); 2379 // document.addEventListener("DOMNodeInserted", updateContainer) 2380 // }); 2381 2382 jQuery(function ($) { 2383 function listenForStyleChangesGridItem() { 2384 $('.gecko-grid-layout-editor-styles').each(function () { 2385 var observer = new MutationObserver(function (mutations) { 2386 mutations.forEach(function (mutation) { 2387 // On change update the styles 2388 $('[data-type="gecko/grid-layout-basic"]').each(function () { 2389 var styles = $(this).find(".gecko-grid-layout-editor-styles").attr("style"); 2390 $(this).attr("style", styles); 2391 }); 2392 $('[data-type="gecko/grid-layout-image"]').each(function () { 2393 var styles = $(this).find(".gecko-grid-layout-editor-styles").attr("style"); 2394 $(this).attr("style", styles); 2395 }); 2396 $('[data-type="gecko/grid-layout-item"]').each(function () { 2397 var styles = $(this).find(".gecko-grid-layout-editor-styles").attr("style"); 2398 $(this).attr("style", styles); 2399 }); 2400 }); 2401 }); 2402 observer.disconnect(); 2403 observer.observe(this, { 2404 attributes: true, 2405 attributeFilter: ['style'] 2406 }); 2407 }); 2408 } 2409 2410 function listenForStyleChangesGrid() { 2411 $('.wp-block-gecko-grid-layout-editor').each(function () { 2412 var observer = new MutationObserver(function (mutations) { 2413 mutations.forEach(function (mutation) { 2414 // On change update the styles 2415 $('.wp-block-gecko-grid-layout-editor').each(function () { 2416 var styles = $(this).attr("data-passthru"); 2417 var grid = $(this).attr("data-grid"); 2418 $(this).find(".editor-block-list__layout").attr("style", styles); 2419 }); 2420 }); 2421 }); 2422 observer.disconnect(); 2423 observer.observe(this, { 2424 attributes: true, 2425 attributeFilter: ['data-passthru', 'style'] 2426 }); 2427 }); 2428 } 2429 2430 function updateStylesGridItem() { 2431 $('[data-type="gecko/grid-layout-image"]').each(function () { 2432 var styles = $(this).find(".gecko-grid-layout-editor-styles").attr("style"); 2433 $(this).attr("style", styles); 2434 }); 2435 $('[data-type="gecko/grid-layout-basic"]').each(function () { 2436 var styles = $(this).find(".gecko-grid-layout-editor-styles").attr("style"); 2437 $(this).attr("style", styles); 2438 }); 2439 $('[data-type="gecko/grid-layout-item"]').each(function () { 2440 var styles = $(this).find(".gecko-grid-layout-editor-styles").attr("style"); 2441 $(this).attr("style", styles); 2442 }); 2443 } 2444 2445 function updateStylesGrid() { 2446 $('.wp-block-gecko-grid-layout-editor').each(function () { 2447 var styles = $(this).attr("data-passthru"); 2448 var grid = $(this).attr("data-grid"); 2449 $(this).find(".editor-block-list__layout").attr("style", styles); 2450 }); 2451 } 2452 2453 $('body').on('DOMNodeInserted', '.wp-block-gecko-grid-layout-editor', function (e) { 2454 if ($('.wp-block-gecko-grid-layout-editor')) { 2455 updateStylesGrid(); 2456 updateStylesGridItem(); 2457 listenForStyleChangesGrid(); 2458 listenForStyleChangesGridItem(); 2459 } 2460 }); 2461 $(window).load(function () { 2462 updateStylesGrid(); 2463 updateStylesGridItem(); 2464 listenForStyleChangesGrid(); 2465 listenForStyleChangesGridItem(); 2466 }); 2467 }); 2468 2469 /***/ }), 2470 2471 /***/ "./src/template-preview.js": 2472 /*!*********************************!*\ 2473 !*** ./src/template-preview.js ***! 2474 \*********************************/ 2475 /*! exports provided: default */ 2476 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2477 2478 "use strict"; 2479 __webpack_require__.r(__webpack_exports__); 2480 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Preview; }); 2481 /* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js"); 2482 /* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); 2483 /* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js"); 2484 /* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); 2485 /* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); 2486 /* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); 2487 /* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/getPrototypeOf.js"); 2488 /* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); 2489 /* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/inherits.js"); 2490 /* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__); 2491 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ "react"); 2492 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__); 2493 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); 2494 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_6__); 2495 2496 2497 2498 2499 2500 2501 // import { Fragment } from '@wordpress/element'; 2502 2503 var Preview = 2504 /*#__PURE__*/ 2505 function (_React$PureComponent) { 2506 _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(Preview, _React$PureComponent); 2507 2508 function Preview() { 2509 _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, Preview); 2510 2511 return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(Preview).apply(this, arguments)); 2512 } 2513 2514 _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(Preview, [{ 2515 key: "render", 2516 value: function render() { 2517 var layout = this.props.layout; 2518 return react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement("div", { 2519 className: "gecko-grid-layout-template-preview" 2520 }, layout.map(function (block, key) { 2521 var styles = { 2522 gridColumnEnd: 'span ' + block[1].w, 2523 gridRowEnd: 'span ' + block[1].h 2524 }; 2525 return react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement("div", { 2526 key: key, 2527 className: "gecko-grid-layout-template-preview__item", 2528 style: styles 2529 }); 2530 })); 2531 } 2532 }]); 2533 2534 return Preview; 2535 }(react__WEBPACK_IMPORTED_MODULE_5___default.a.PureComponent); 2536 2537 2538 2539 /***/ }), 2540 2541 /***/ "./src/template-select.js": 2542 /*!********************************!*\ 2543 !*** ./src/template-select.js ***! 2544 \********************************/ 2545 /*! exports provided: default */ 2546 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2547 2548 "use strict"; 2549 __webpack_require__.r(__webpack_exports__); 2550 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return TemplateSelect; }); 2551 /* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js"); 2552 /* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); 2553 /* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js"); 2554 /* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); 2555 /* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); 2556 /* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); 2557 /* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/getPrototypeOf.js"); 2558 /* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); 2559 /* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "./node_modules/@babel/runtime/helpers/assertThisInitialized.js"); 2560 /* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__); 2561 /* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/inherits.js"); 2562 /* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__); 2563 /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/defineProperty.js"); 2564 /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6__); 2565 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react */ "react"); 2566 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_7__); 2567 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); 2568 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__); 2569 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @wordpress/editor */ "@wordpress/editor"); 2570 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_wordpress_editor__WEBPACK_IMPORTED_MODULE_9__); 2571 /* harmony import */ var _templates__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./templates */ "./src/templates.js"); 2572 /* harmony import */ var _template_preview__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./template-preview */ "./src/template-preview.js"); 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 // Custom Templates to choose from. 2584 2585 // Custom Templates to choose from. 2586 // import { Fragment } from '@wordpress/element'; 2587 2588 var TemplateSelect = 2589 /*#__PURE__*/ 2590 function (_React$Component) { 2591 _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(TemplateSelect, _React$Component); 2592 2593 function TemplateSelect(props) { 2594 var _this; 2595 2596 _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, TemplateSelect); 2597 2598 _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(TemplateSelect).call(this, props)); 2599 2600 _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6___default()(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this), "setTemplate", function (template) { 2601 _this.setState({ 2602 selected: template 2603 }); 2604 }); 2605 2606 _this.state = { 2607 selected: null 2608 }; 2609 return _this; 2610 } 2611 2612 _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(TemplateSelect, [{ 2613 key: "render", 2614 value: function render() { 2615 var _this2 = this; 2616 2617 var _this$props = this.props, 2618 hasInnnerBlocks = _this$props.hasInnnerBlocks, 2619 allowedBlocks = _this$props.allowedBlocks; 2620 var selected = this.state.selected; 2621 var blankTemplate = [['gecko/grid-layout-basic', { 2622 w: 6 2623 }]]; 2624 2625 if (!hasInnnerBlocks && !selected) { 2626 return react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { 2627 className: "gecko-grid-layout-template-select" 2628 }, react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("h2", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__["__"])('Choose a Template')), react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("p", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__["__"])('This is a starting point. Templates make it easy to choose a layout. Blocks can be changed once they are selected.')), react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { 2629 className: "gecko-grid-layout-template-select__templates" 2630 }, Object(_templates__WEBPACK_IMPORTED_MODULE_10__["default"])().map(function (template, key) { 2631 return react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { 2632 key: key, 2633 className: "gecko-grid-layout-template-select__template", 2634 onClick: function onClick() { 2635 return _this2.setTemplate(template.layout); 2636 } 2637 }, react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_template_preview__WEBPACK_IMPORTED_MODULE_11__["default"], { 2638 layout: template.layout 2639 }), react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("p", null, template.label)); 2640 }), react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { 2641 className: "gecko-grid-layout-template-select__template", 2642 onClick: function onClick() { 2643 return _this2.setTemplate(blankTemplate); 2644 } 2645 }, react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_template_preview__WEBPACK_IMPORTED_MODULE_11__["default"], { 2646 layout: blankTemplate 2647 }), react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("p", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__["__"])('Create New'))))); 2648 } 2649 2650 return react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_9__["InnerBlocks"], { 2651 template: selected, 2652 templateLock: false, 2653 allowedBlocks: allowedBlocks 2654 }); 2655 } 2656 }]); 2657 2658 return TemplateSelect; 2659 }(react__WEBPACK_IMPORTED_MODULE_7___default.a.Component); 2660 2661 2662 2663 /***/ }), 2664 2665 /***/ "./src/templates.js": 2666 /*!**************************!*\ 2667 !*** ./src/templates.js ***! 2668 \**************************/ 2669 /*! exports provided: default */ 2670 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2671 2672 "use strict"; 2673 __webpack_require__.r(__webpack_exports__); 2674 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getTemplates; }); 2675 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); 2676 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); 2677 /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/hooks */ "@wordpress/hooks"); 2678 /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_1__); 2679 /** 2680 * WordPress dependencies 2681 */ 2682 2683 2684 function getTemplates() { 2685 var templates = [{ 2686 label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__["__"])('2 Columns'), 2687 layout: [['gecko/grid-layout-basic', { 2688 w: 6 2689 }], ['gecko/grid-layout-basic', { 2690 w: 6 2691 }]] 2692 }, { 2693 label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__["__"])('3 Columns'), 2694 layout: [['gecko/grid-layout-basic', { 2695 w: 4 2696 }], ['gecko/grid-layout-basic', { 2697 w: 4 2698 }], ['gecko/grid-layout-basic', { 2699 w: 4 2700 }]] 2701 }]; 2702 return Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_1__["applyFilters"])('gecko.grid-layout.templates', templates); 2703 } 2704 2705 /***/ }), 2706 2707 /***/ "@wordpress/blocks": 2708 /*!***********************************!*\ 2709 !*** external "window.wp.blocks" ***! 2710 \***********************************/ 2711 /*! no static exports found */ 2712 /***/ (function(module, exports) { 2713 2714 module.exports = window.wp.blocks; 2715 2716 /***/ }), 2717 2718 /***/ "@wordpress/components": 2719 /*!***************************************!*\ 2720 !*** external "window.wp.components" ***! 2721 \***************************************/ 2722 /*! no static exports found */ 2723 /***/ (function(module, exports) { 2724 2725 module.exports = window.wp.components; 2726 2727 /***/ }), 2728 2729 /***/ "@wordpress/data": 2730 /*!*********************************!*\ 2731 !*** external "window.wp.data" ***! 2732 \*********************************/ 2733 /*! no static exports found */ 2734 /***/ (function(module, exports) { 2735 2736 module.exports = window.wp.data; 2737 2738 /***/ }), 2739 2740 /***/ "@wordpress/editor": 2741 /*!***********************************!*\ 2742 !*** external "window.wp.editor" ***! 2743 \***********************************/ 2744 /*! no static exports found */ 2745 /***/ (function(module, exports) { 2746 2747 module.exports = window.wp.editor; 2748 2749 /***/ }), 2750 2751 /***/ "@wordpress/element": 2752 /*!************************************!*\ 2753 !*** external "window.wp.element" ***! 2754 \************************************/ 2755 /*! no static exports found */ 2756 /***/ (function(module, exports) { 2757 2758 module.exports = window.wp.element; 2759 2760 /***/ }), 2761 2762 /***/ "@wordpress/hooks": 2763 /*!**********************************!*\ 2764 !*** external "window.wp.hooks" ***! 2765 \**********************************/ 2766 /*! no static exports found */ 2767 /***/ (function(module, exports) { 2768 2769 module.exports = window.wp.hooks; 2770 2771 /***/ }), 2772 2773 /***/ "@wordpress/i18n": 2774 /*!*********************************!*\ 2775 !*** external "window.wp.i18n" ***! 2776 \*********************************/ 2777 /*! no static exports found */ 2778 /***/ (function(module, exports) { 2779 2780 module.exports = window.wp.i18n; 2781 2782 /***/ }), 2783 2784 /***/ "react": 2785 /*!************************!*\ 2786 !*** external "React" ***! 2787 \************************/ 2788 /*! no static exports found */ 2789 /***/ (function(module, exports) { 2790 2791 module.exports = React; 2792 2793 /***/ }) 2794 2795 /******/ }); 2796 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy90aW55Y29sb3IyL3Rpbnljb2xvci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZ3JpZC1sYXlvdXQtYmFzaWMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2dyaWQtbGF5b3V0LWltYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy9ncmlkLWxheW91dC1pdGVtLmpzIiwid2VicGFjazovLy8uL3NyYy9ncmlkLWxheW91dC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlLXByZXZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlLXNlbGVjdC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy53cC5ibG9ja3NcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cud3AuY29tcG9uZW50c1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy53cC5kYXRhXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LndwLmVkaXRvclwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy53cC5lbGVtZW50XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LndwLmhvb2tzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LndwLmkxOG5cIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJSZWFjdFwiIl0sIm5hbWVzIjpbIm5hbWUiLCJzZXR0aW5ncyIsInRpdGxlIiwiX18iLCJwYXJlbnQiLCJpY29uIiwiZGVzY3JpcHRpb24iLCJjYXRlZ29yeSIsInN1cHBvcnRzIiwiY2xhc3NOYW1lIiwiaW5zZXJ0ZXIiLCJyZXVzYWJsZSIsImh0bWwiLCJzdHlsZXMiLCJsYWJlbCIsImlzRGVmYXVsdCIsImF0dHJpYnV0ZXMiLCJoIiwidHlwZSIsImRlZmF1bHQiLCJ3IiwidHJhbnNmb3JtcyIsImZyb20iLCJibG9ja3MiLCJ0cmFuc2Zvcm0iLCJpbm5lckJsb2NrcyIsInNlbGVjdGVkIiwic2VsZWN0IiwiZ2V0U2VsZWN0ZWRCbG9jayIsImNyZWF0ZUJsb2NrIiwiZGVwcmVjYXRlZCIsIm1pZ3JhdGUiLCJzYXZlIiwiZWRpdCIsInNldEF0dHJpYnV0ZXMiLCJpbnNlcnRCbG9ja3NBZnRlciIsImdyaWRDb2x1bW5FbmQiLCJncmlkUm93RW5kIiwibmV4dCIsIkFMTE9XRURfQkxPQ0tTIiwibWluSGVpZ2h0IiwiaW1nSWQiLCJpbWdVcmwiLCJiZ01lZGlhIiwiYmdNZWRpYVVybCIsIm1lZGlhSWQiLCJtZWRpYVVybCIsInZhbHVlIiwiaWQiLCJ1cmwiLCJvcGVuIiwidW5kZWZpbmVkIiwib3BhY2l0eSIsImJnQ29sb3IiLCJiZ0NvbG9yU2x1ZyIsImJnQ29sb3JCcmlnaHRuZXNzIiwicGFkZGluZyIsImJhY2tncm91bmRDb2xvciIsImJhY2tncm91bmRJbWFnZSIsImxpZ2h0T3JEYXJrIiwiY3Vyc29yIiwiY29sb3IiLCJnZXRFZGl0b3JTZXR0aW5ncyIsImNvbG9yU2x1ZyIsImdldENvbG9yT2JqZWN0QnlDb2xvclZhbHVlIiwiY29sb3JzIiwic2x1ZyIsImJyaWdodG5lc3MiLCJ0aW55Y29sb3IiLCJnZXRCcmlnaHRuZXNzIiwiYWxpZ24iLCJjbGllbnRJZCIsImJsb2NrIiwiZ2V0QmxvY2tzQnlDbGllbnRJZCIsImhhc0lubmVyQmxvY2tzIiwibGVuZ3RoIiwicmVnaXN0ZXJCbG9ja1R5cGUiLCJncmlkIiwiZ3JpZEl0ZW1CYXNpYyIsImdyaWRJdGVtSW1hZ2UiLCJncmlkSXRlbSIsImpRdWVyeSIsIiQiLCJsaXN0ZW5Gb3JTdHlsZUNoYW5nZXNHcmlkSXRlbSIsImVhY2giLCJvYnNlcnZlciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJtdXRhdGlvbnMiLCJmb3JFYWNoIiwibXV0YXRpb24iLCJmaW5kIiwiYXR0ciIsImRpc2Nvbm5lY3QiLCJvYnNlcnZlIiwiYXR0cmlidXRlRmlsdGVyIiwibGlzdGVuRm9yU3R5bGVDaGFuZ2VzR3JpZCIsInVwZGF0ZVN0eWxlc0dyaWRJdGVtIiwidXBkYXRlU3R5bGVzR3JpZCIsIm9uIiwiZSIsIndpbmRvdyIsImxvYWQiLCJQcmV2aWV3IiwibGF5b3V0IiwicHJvcHMiLCJtYXAiLCJrZXkiLCJSZWFjdCIsIlB1cmVDb21wb25lbnQiLCJUZW1wbGF0ZVNlbGVjdCIsInRlbXBsYXRlIiwic2V0U3RhdGUiLCJzdGF0ZSIsImhhc0lubm5lckJsb2NrcyIsImFsbG93ZWRCbG9ja3MiLCJibGFua1RlbXBsYXRlIiwidGVtcGxhdGVzIiwic2V0VGVtcGxhdGUiLCJDb21wb25lbnQiLCJnZXRUZW1wbGF0ZXMiLCJhcHBseUZpbHRlcnMiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtEQUEwQyxnQ0FBZ0M7QUFDMUU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnRUFBd0Qsa0JBQWtCO0FBQzFFO0FBQ0EseURBQWlELGNBQWM7QUFDL0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUF5QyxpQ0FBaUM7QUFDMUUsd0hBQWdILG1CQUFtQixFQUFFO0FBQ3JJO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7OztBQUdBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHdDOzs7Ozs7Ozs7OztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUM7Ozs7Ozs7Ozs7O0FDTkE7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOEI7Ozs7Ozs7Ozs7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUM7Ozs7Ozs7Ozs7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDOzs7Ozs7Ozs7OztBQ1BBLHFCQUFxQixtQkFBTyxDQUFDLGlGQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUEsMkI7Ozs7Ozs7Ozs7O0FDakJBLGNBQWMsbUJBQU8sQ0FBQywwRUFBbUI7O0FBRXpDLDRCQUE0QixtQkFBTyxDQUFDLCtGQUF5Qjs7QUFFN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw0Qzs7Ozs7Ozs7Ozs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUM7Ozs7Ozs7Ozs7O0FDVEEsd0JBQXdCLDJFQUEyRSxvQ0FBb0MsbUJBQW1CLEdBQUcsRUFBRSxPQUFPLG9DQUFvQyw4SEFBOEgsR0FBRyxFQUFFLHNCQUFzQjs7QUFFblc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHlCOzs7Ozs7Ozs7OztBQ2hCQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxvQkFBb0I7O0FBRXBCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDhCQUE4QjtBQUNwRCxzQkFBc0IsOEJBQThCO0FBQ3BELHNCQUFzQiw4QkFBOEI7O0FBRXBEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtCQUErQixtQkFBbUIsT0FBTztBQUN6RCwrQkFBK0IsbUJBQW1CLE9BQU87QUFDekQsK0JBQStCLG1CQUFtQixPQUFPO0FBQ3pEO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGdCQUFnQjtBQUNoQixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxnQkFBZ0I7QUFDaEIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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RFY7QUFFQ29HLFVBQU0sRUFBRSxDQUNQLENBQUMseUJBQUQsRUFBNEI7QUFDM0JuRixPQUFDLEVBQUU7QUFEd0IsS0FBNUIsQ0FETyxFQUlQLENBQUMseUJBQUQsRUFBNEI7QUFDM0JBLE9BQUMsRUFBRTtBQUR3QixLQUE1QixDQUpPLEVBT1AsQ0FBQyx5QkFBRCxFQUE0QjtBQUMzQkEsT0FBQyxFQUFFO0FBRHdCLEtBQTVCLENBUE87QUFGVCxHQVhpQixDQUFsQjtBQTBCQSxTQUFPb0cscUVBQVksQ0FBQyw2QkFBRCxFQUFnQ0osU0FBaEMsQ0FBbkI7QUFDQSxDOzs7Ozs7Ozs7OztBQ2pDRCxrQzs7Ozs7Ozs7Ozs7QUNBQSxzQzs7Ozs7Ozs7Ozs7QUNBQSxnQzs7Ozs7Ozs7Ozs7QUNBQSxrQzs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSxpQzs7Ozs7Ozs7Ozs7QUNBQSxnQzs7Ozs7Ozs7Ozs7QUNBQSx1QiIsImZpbGUiOiJlZGl0b3IuYnVuZGxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvd3AtY29udGVudC9wbHVnaW5zL2dlY2tvLWdyaWQtbGF5b3V0L2Rpc3QvXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2luZGV4LmpzXCIpO1xuIiwiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkOyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrOyIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3M7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5OyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZjsiLCJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZlwiKTtcblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3R5cGVvZlwiKTtcblxudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiKTtcblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjsiLCJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcblxuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZjsiLCJmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YyID0gZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZjIob2JqKTsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIF90eXBlb2YyKFN5bWJvbC5pdGVyYXRvcikgPT09IFwic3ltYm9sXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIF90eXBlb2YyKG9iaik7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IF90eXBlb2YyKG9iaik7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZjsiLCIvLyBUaW55Q29sb3IgdjEuNC4xXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYmdyaW5zL1RpbnlDb2xvclxuLy8gQnJpYW4gR3JpbnN0ZWFkLCBNSVQgTGljZW5zZVxuXG4oZnVuY3Rpb24oTWF0aCkge1xuXG52YXIgdHJpbUxlZnQgPSAvXlxccysvLFxuICAgIHRyaW1SaWdodCA9IC9cXHMrJC8sXG4gICAgdGlueUNvdW50ZXIgPSAwLFxuICAgIG1hdGhSb3VuZCA9IE1hdGgucm91bmQsXG4gICAgbWF0aE1pbiA9IE1hdGgubWluLFxuICAgIG1hdGhNYXggPSBNYXRoLm1heCxcbiAgICBtYXRoUmFuZG9tID0gTWF0aC5yYW5kb207XG5cbmZ1bmN0aW9uIHRpbnljb2xvciAoY29sb3IsIG9wdHMpIHtcblxuICAgIGNvbG9yID0gKGNvbG9yKSA/IGNvbG9yIDogJyc7XG4gICAgb3B0cyA9IG9wdHMgfHwgeyB9O1xuXG4gICAgLy8gSWYgaW5wdXQgaXMgYWxyZWFkeSBhIHRpbnljb2xvciwgcmV0dXJuIGl0c2VsZlxuICAgIGlmIChjb2xvciBpbnN0YW5jZW9mIHRpbnljb2xvcikge1xuICAgICAgIHJldHVybiBjb2xvcjtcbiAgICB9XG4gICAgLy8gSWYgd2UgYXJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCBjYWxsIHVzaW5nIG5ldyBpbnN0ZWFkXG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIHRpbnljb2xvcikpIHtcbiAgICAgICAgcmV0dXJuIG5ldyB0aW55Y29sb3IoY29sb3IsIG9wdHMpO1xuICAgIH1cblxuICAgIHZhciByZ2IgPSBpbnB1dFRvUkdCKGNvbG9yKTtcbiAgICB0aGlzLl9vcmlnaW5hbElucHV0ID0gY29sb3IsXG4gICAgdGhpcy5fciA9IHJnYi5yLFxuICAgIHRoaXMuX2cgPSByZ2IuZyxcbiAgICB0aGlzLl9iID0gcmdiLmIsXG4gICAgdGhpcy5fYSA9IHJnYi5hLFxuICAgIHRoaXMuX3JvdW5kQSA9IG1hdGhSb3VuZCgxMDAqdGhpcy5fYSkgLyAxMDAsXG4gICAgdGhpcy5fZm9ybWF0ID0gb3B0cy5mb3JtYXQgfHwgcmdiLmZvcm1hdDtcbiAgICB0aGlzLl9ncmFkaWVudFR5cGUgPSBvcHRzLmdyYWRpZW50VHlwZTtcblxuICAgIC8vIERvbid0IGxldCB0aGUgcmFuZ2Ugb2YgWzAsMjU1XSBjb21lIGJhY2sgaW4gWzAsMV0uXG4gICAgLy8gUG90ZW50aWFsbHkgbG9zZSBhIGxpdHRsZSBiaXQgb2YgcHJlY2lzaW9uIGhlcmUsIGJ1dCB3aWxsIGZpeCBpc3N1ZXMgd2hlcmVcbiAgICAvLyAuNSBnZXRzIGludGVycHJldGVkIGFzIGhhbGYgb2YgdGhlIHRvdGFsLCBpbnN0ZWFkIG9mIGhhbGYgb2YgMVxuICAgIC8vIElmIGl0IHdhcyBzdXBwb3NlZCB0byBiZSAxMjgsIHRoaXMgd2FzIGFscmVhZHkgdGFrZW4gY2FyZSBvZiBieSBgaW5wdXRUb1JnYmBcbiAgICBpZiAodGhpcy5fciA8IDEpIHsgdGhpcy5fciA9IG1hdGhSb3VuZCh0aGlzLl9yKTsgfVxuICAgIGlmICh0aGlzLl9nIDwgMSkgeyB0aGlzLl9nID0gbWF0aFJvdW5kKHRoaXMuX2cpOyB9XG4gICAgaWYgKHRoaXMuX2IgPCAxKSB7IHRoaXMuX2IgPSBtYXRoUm91bmQodGhpcy5fYik7IH1cblxuICAgIHRoaXMuX29rID0gcmdiLm9rO1xuICAgIHRoaXMuX3RjX2lkID0gdGlueUNvdW50ZXIrKztcbn1cblxudGlueWNvbG9yLnByb3RvdHlwZSA9IHtcbiAgICBpc0Rhcms6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRCcmlnaHRuZXNzKCkgPCAxMjg7XG4gICAgfSxcbiAgICBpc0xpZ2h0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzRGFyaygpO1xuICAgIH0sXG4gICAgaXNWYWxpZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vaztcbiAgICB9LFxuICAgIGdldE9yaWdpbmFsSW5wdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX29yaWdpbmFsSW5wdXQ7XG4gICAgfSxcbiAgICBnZXRGb3JtYXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0O1xuICAgIH0sXG4gICAgZ2V0QWxwaGE6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYTtcbiAgICB9LFxuICAgIGdldEJyaWdodG5lc3M6IGZ1bmN0aW9uKCkge1xuICAgICAgICAvL2h0dHA6Ly93d3cudzMub3JnL1RSL0FFUlQjY29sb3ItY29udHJhc3RcbiAgICAgICAgdmFyIHJnYiA9IHRoaXMudG9SZ2IoKTtcbiAgICAgICAgcmV0dXJuIChyZ2IuciAqIDI5OSArIHJnYi5nICogNTg3ICsgcmdiLmIgKiAxMTQpIC8gMTAwMDtcbiAgICB9LFxuICAgIGdldEx1bWluYW5jZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vaHR0cDovL3d3dy53My5vcmcvVFIvMjAwOC9SRUMtV0NBRzIwLTIwMDgxMjExLyNyZWxhdGl2ZWx1bWluYW5jZWRlZlxuICAgICAgICB2YXIgcmdiID0gdGhpcy50b1JnYigpO1xuICAgICAgICB2YXIgUnNSR0IsIEdzUkdCLCBCc1JHQiwgUiwgRywgQjtcbiAgICAgICAgUnNSR0IgPSByZ2Iuci8yNTU7XG4gICAgICAgIEdzUkdCID0gcmdiLmcvMjU1O1xuICAgICAgICBCc1JHQiA9IHJnYi5iLzI1NTtcblxuICAgICAgICBpZiAoUnNSR0IgPD0gMC4wMzkyOCkge1IgPSBSc1JHQiAvIDEyLjkyO30gZWxzZSB7UiA9IE1hdGgucG93KCgoUnNSR0IgKyAwLjA1NSkgLyAxLjA1NSksIDIuNCk7fVxuICAgICAgICBpZiAoR3NSR0IgPD0gMC4wMzkyOCkge0cgPSBHc1JHQiAvIDEyLjkyO30gZWxzZSB7RyA9IE1hdGgucG93KCgoR3NSR0IgKyAwLjA1NSkgLyAxLjA1NSksIDIuNCk7fVxuICAgICAgICBpZiAoQnNSR0IgPD0gMC4wMzkyOCkge0IgPSBCc1JHQiAvIDEyLjkyO30gZWxzZSB7QiA9IE1hdGgucG93KCgoQnNSR0IgKyAwLjA1NSkgLyAxLjA1NSksIDIuNCk7fVxuICAgICAgICByZXR1cm4gKDAuMjEyNiAqIFIpICsgKDAuNzE1MiAqIEcpICsgKDAuMDcyMiAqIEIpO1xuICAgIH0sXG4gICAgc2V0QWxwaGE6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2EgPSBib3VuZEFscGhhKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fcm91bmRBID0gbWF0aFJvdW5kKDEwMCp0aGlzLl9hKSAvIDEwMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICB0b0hzdjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBoc3YgPSByZ2JUb0hzdih0aGlzLl9yLCB0aGlzLl9nLCB0aGlzLl9iKTtcbiAgICAgICAgcmV0dXJuIHsgaDogaHN2LmggKiAzNjAsIHM6IGhzdi5zLCB2OiBoc3YudiwgYTogdGhpcy5fYSB9O1xuICAgIH0sXG4gICAgdG9Ic3ZTdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgaHN2ID0gcmdiVG9Ic3YodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYik7XG4gICAgICAgIHZhciBoID0gbWF0aFJvdW5kKGhzdi5oICogMzYwKSwgcyA9IG1hdGhSb3VuZChoc3YucyAqIDEwMCksIHYgPSBtYXRoUm91bmQoaHN2LnYgKiAxMDApO1xuICAgICAgICByZXR1cm4gKHRoaXMuX2EgPT0gMSkgP1xuICAgICAgICAgIFwiaHN2KFwiICArIGggKyBcIiwgXCIgKyBzICsgXCIlLCBcIiArIHYgKyBcIiUpXCIgOlxuICAgICAgICAgIFwiaHN2YShcIiArIGggKyBcIiwgXCIgKyBzICsgXCIlLCBcIiArIHYgKyBcIiUsIFwiKyB0aGlzLl9yb3VuZEEgKyBcIilcIjtcbiAgICB9LFxuICAgIHRvSHNsOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGhzbCA9IHJnYlRvSHNsKHRoaXMuX3IsIHRoaXMuX2csIHRoaXMuX2IpO1xuICAgICAgICByZXR1cm4geyBoOiBoc2wuaCAqIDM2MCwgczogaHNsLnMsIGw6IGhzbC5sLCBhOiB0aGlzLl9hIH07XG4gICAgfSxcbiAgICB0b0hzbFN0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBoc2wgPSByZ2JUb0hzbCh0aGlzLl9yLCB0aGlzLl9nLCB0aGlzLl9iKTtcbiAgICAgICAgdmFyIGggPSBtYXRoUm91bmQoaHNsLmggKiAzNjApLCBzID0gbWF0aFJvdW5kKGhzbC5zICogMTAwKSwgbCA9IG1hdGhSb3VuZChoc2wubCAqIDEwMCk7XG4gICAgICAgIHJldHVybiAodGhpcy5fYSA9PSAxKSA/XG4gICAgICAgICAgXCJoc2woXCIgICsgaCArIFwiLCBcIiArIHMgKyBcIiUsIFwiICsgbCArIFwiJSlcIiA6XG4gICAgICAgICAgXCJoc2xhKFwiICsgaCArIFwiLCBcIiArIHMgKyBcIiUsIFwiICsgbCArIFwiJSwgXCIrIHRoaXMuX3JvdW5kQSArIFwiKVwiO1xuICAgIH0sXG4gICAgdG9IZXg6IGZ1bmN0aW9uKGFsbG93M0NoYXIpIHtcbiAgICAgICAgcmV0dXJuIHJnYlRvSGV4KHRoaXMuX3IsIHRoaXMuX2csIHRoaXMuX2IsIGFsbG93M0NoYXIpO1xuICAgIH0sXG4gICAgdG9IZXhTdHJpbmc6IGZ1bmN0aW9uKGFsbG93M0NoYXIpIHtcbiAgICAgICAgcmV0dXJuICcjJyArIHRoaXMudG9IZXgoYWxsb3czQ2hhcik7XG4gICAgfSxcbiAgICB0b0hleDg6IGZ1bmN0aW9uKGFsbG93NENoYXIpIHtcbiAgICAgICAgcmV0dXJuIHJnYmFUb0hleCh0aGlzLl9yLCB0aGlzLl9nLCB0aGlzLl9iLCB0aGlzLl9hLCBhbGxvdzRDaGFyKTtcbiAgICB9LFxuICAgIHRvSGV4OFN0cmluZzogZnVuY3Rpb24oYWxsb3c0Q2hhcikge1xuICAgICAgICByZXR1cm4gJyMnICsgdGhpcy50b0hleDgoYWxsb3c0Q2hhcik7XG4gICAgfSxcbiAgICB0b1JnYjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB7IHI6IG1hdGhSb3VuZCh0aGlzLl9yKSwgZzogbWF0aFJvdW5kKHRoaXMuX2cpLCBiOiBtYXRoUm91bmQodGhpcy5fYiksIGE6IHRoaXMuX2EgfTtcbiAgICB9LFxuICAgIHRvUmdiU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9hID09IDEpID9cbiAgICAgICAgICBcInJnYihcIiAgKyBtYXRoUm91bmQodGhpcy5fcikgKyBcIiwgXCIgKyBtYXRoUm91bmQodGhpcy5fZykgKyBcIiwgXCIgKyBtYXRoUm91bmQodGhpcy5fYikgKyBcIilcIiA6XG4gICAgICAgICAgXCJyZ2JhKFwiICsgbWF0aFJvdW5kKHRoaXMuX3IpICsgXCIsIFwiICsgbWF0aFJvdW5kKHRoaXMuX2cpICsgXCIsIFwiICsgbWF0aFJvdW5kKHRoaXMuX2IpICsgXCIsIFwiICsgdGhpcy5fcm91bmRBICsgXCIpXCI7XG4gICAgfSxcbiAgICB0b1BlcmNlbnRhZ2VSZ2I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4geyByOiBtYXRoUm91bmQoYm91bmQwMSh0aGlzLl9yLCAyNTUpICogMTAwKSArIFwiJVwiLCBnOiBtYXRoUm91bmQoYm91bmQwMSh0aGlzLl9nLCAyNTUpICogMTAwKSArIFwiJVwiLCBiOiBtYXRoUm91bmQoYm91bmQwMSh0aGlzLl9iLCAyNTUpICogMTAwKSArIFwiJVwiLCBhOiB0aGlzLl9hIH07XG4gICAgfSxcbiAgICB0b1BlcmNlbnRhZ2VSZ2JTdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuX2EgPT0gMSkgP1xuICAgICAgICAgIFwicmdiKFwiICArIG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX3IsIDI1NSkgKiAxMDApICsgXCIlLCBcIiArIG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX2csIDI1NSkgKiAxMDApICsgXCIlLCBcIiArIG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX2IsIDI1NSkgKiAxMDApICsgXCIlKVwiIDpcbiAgICAgICAgICBcInJnYmEoXCIgKyBtYXRoUm91bmQoYm91bmQwMSh0aGlzLl9yLCAyNTUpICogMTAwKSArIFwiJSwgXCIgKyBtYXRoUm91bmQoYm91bmQwMSh0aGlzLl9nLCAyNTUpICogMTAwKSArIFwiJSwgXCIgKyBtYXRoUm91bmQoYm91bmQwMSh0aGlzLl9iLCAyNTUpICogMTAwKSArIFwiJSwgXCIgKyB0aGlzLl9yb3VuZEEgKyBcIilcIjtcbiAgICB9LFxuICAgIHRvTmFtZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLl9hID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJ0cmFuc3BhcmVudFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2EgPCAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaGV4TmFtZXNbcmdiVG9IZXgodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYiwgdHJ1ZSldIHx8IGZhbHNlO1xuICAgIH0sXG4gICAgdG9GaWx0ZXI6IGZ1bmN0aW9uKHNlY29uZENvbG9yKSB7XG4gICAgICAgIHZhciBoZXg4U3RyaW5nID0gJyMnICsgcmdiYVRvQXJnYkhleCh0aGlzLl9yLCB0aGlzLl9nLCB0aGlzLl9iLCB0aGlzLl9hKTtcbiAgICAgICAgdmFyIHNlY29uZEhleDhTdHJpbmcgPSBoZXg4U3RyaW5nO1xuICAgICAgICB2YXIgZ3JhZGllbnRUeXBlID0gdGhpcy5fZ3JhZGllbnRUeXBlID8gXCJHcmFkaWVudFR5cGUgPSAxLCBcIiA6IFwiXCI7XG5cbiAgICAgICAgaWYgKHNlY29uZENvbG9yKSB7XG4gICAgICAgICAgICB2YXIgcyA9IHRpbnljb2xvcihzZWNvbmRDb2xvcik7XG4gICAgICAgICAgICBzZWNvbmRIZXg4U3RyaW5nID0gJyMnICsgcmdiYVRvQXJnYkhleChzLl9yLCBzLl9nLCBzLl9iLCBzLl9hKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChcIitncmFkaWVudFR5cGUrXCJzdGFydENvbG9yc3RyPVwiK2hleDhTdHJpbmcrXCIsZW5kQ29sb3JzdHI9XCIrc2Vjb25kSGV4OFN0cmluZytcIilcIjtcbiAgICB9LFxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgdmFyIGZvcm1hdFNldCA9ICEhZm9ybWF0O1xuICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgdGhpcy5fZm9ybWF0O1xuXG4gICAgICAgIHZhciBmb3JtYXR0ZWRTdHJpbmcgPSBmYWxzZTtcbiAgICAgICAgdmFyIGhhc0FscGhhID0gdGhpcy5fYSA8IDEgJiYgdGhpcy5fYSA+PSAwO1xuICAgICAgICB2YXIgbmVlZHNBbHBoYUZvcm1hdCA9ICFmb3JtYXRTZXQgJiYgaGFzQWxwaGEgJiYgKGZvcm1hdCA9PT0gXCJoZXhcIiB8fCBmb3JtYXQgPT09IFwiaGV4NlwiIHx8IGZvcm1hdCA9PT0gXCJoZXgzXCIgfHwgZm9ybWF0ID09PSBcImhleDRcIiB8fCBmb3JtYXQgPT09IFwiaGV4OFwiIHx8IGZvcm1hdCA9PT0gXCJuYW1lXCIpO1xuXG4gICAgICAgIGlmIChuZWVkc0FscGhhRm9ybWF0KSB7XG4gICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIFwidHJhbnNwYXJlbnRcIiwgYWxsIG90aGVyIG5vbi1hbHBoYSBmb3JtYXRzXG4gICAgICAgICAgICAvLyB3aWxsIHJldHVybiByZ2JhIHdoZW4gdGhlcmUgaXMgdHJhbnNwYXJlbmN5LlxuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJuYW1lXCIgJiYgdGhpcy5fYSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvTmFtZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9SZ2JTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcInJnYlwiKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRTdHJpbmcgPSB0aGlzLnRvUmdiU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJwcmdiXCIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9QZXJjZW50YWdlUmdiU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJoZXhcIiB8fCBmb3JtYXQgPT09IFwiaGV4NlwiKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRTdHJpbmcgPSB0aGlzLnRvSGV4U3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJoZXgzXCIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9IZXhTdHJpbmcodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJoZXg0XCIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9IZXg4U3RyaW5nKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiaGV4OFwiKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRTdHJpbmcgPSB0aGlzLnRvSGV4OFN0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwibmFtZVwiKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRTdHJpbmcgPSB0aGlzLnRvTmFtZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiaHNsXCIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9Ic2xTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcImhzdlwiKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRTdHJpbmcgPSB0aGlzLnRvSHN2U3RyaW5nKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ybWF0dGVkU3RyaW5nIHx8IHRoaXMudG9IZXhTdHJpbmcoKTtcbiAgICB9LFxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRpbnljb2xvcih0aGlzLnRvU3RyaW5nKCkpO1xuICAgIH0sXG5cbiAgICBfYXBwbHlNb2RpZmljYXRpb246IGZ1bmN0aW9uKGZuLCBhcmdzKSB7XG4gICAgICAgIHZhciBjb2xvciA9IGZuLmFwcGx5KG51bGwsIFt0aGlzXS5jb25jYXQoW10uc2xpY2UuY2FsbChhcmdzKSkpO1xuICAgICAgICB0aGlzLl9yID0gY29sb3IuX3I7XG4gICAgICAgIHRoaXMuX2cgPSBjb2xvci5fZztcbiAgICAgICAgdGhpcy5fYiA9IGNvbG9yLl9iO1xuICAgICAgICB0aGlzLnNldEFscGhhKGNvbG9yLl9hKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBsaWdodGVuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGxpZ2h0ZW4sIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBicmlnaHRlbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihicmlnaHRlbiwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGRhcmtlbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihkYXJrZW4sIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBkZXNhdHVyYXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGRlc2F0dXJhdGUsIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBzYXR1cmF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihzYXR1cmF0ZSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGdyZXlzY2FsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihncmV5c2NhbGUsIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBzcGluOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHNwaW4sIGFyZ3VtZW50cyk7XG4gICAgfSxcblxuICAgIF9hcHBseUNvbWJpbmF0aW9uOiBmdW5jdGlvbihmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW3RoaXNdLmNvbmNhdChbXS5zbGljZS5jYWxsKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBhbmFsb2dvdXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihhbmFsb2dvdXMsIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBjb21wbGVtZW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oY29tcGxlbWVudCwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1vbm9jaHJvbWF0aWM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihtb25vY2hyb21hdGljLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgc3BsaXRjb21wbGVtZW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oc3BsaXRjb21wbGVtZW50LCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgdHJpYWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbih0cmlhZCwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHRldHJhZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHRldHJhZCwgYXJndW1lbnRzKTtcbiAgICB9XG59O1xuXG4vLyBJZiBpbnB1dCBpcyBhbiBvYmplY3QsIGZvcmNlIDEgaW50byBcIjEuMFwiIHRvIGhhbmRsZSByYXRpb3MgcHJvcGVybHlcbi8vIFN0cmluZyBpbnB1dCByZXF1aXJlcyBcIjEuMFwiIGFzIGlucHV0LCBzbyAxIHdpbGwgYmUgdHJlYXRlZCBhcyAxXG50aW55Y29sb3IuZnJvbVJhdGlvID0gZnVuY3Rpb24oY29sb3IsIG9wdHMpIHtcbiAgICBpZiAodHlwZW9mIGNvbG9yID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdmFyIG5ld0NvbG9yID0ge307XG4gICAgICAgIGZvciAodmFyIGkgaW4gY29sb3IpIHtcbiAgICAgICAgICAgIGlmIChjb2xvci5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICAgICAgICAgIGlmIChpID09PSBcImFcIikge1xuICAgICAgICAgICAgICAgICAgICBuZXdDb2xvcltpXSA9IGNvbG9yW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q29sb3JbaV0gPSBjb252ZXJ0VG9QZXJjZW50YWdlKGNvbG9yW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29sb3IgPSBuZXdDb2xvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGlueWNvbG9yKGNvbG9yLCBvcHRzKTtcbn07XG5cbi8vIEdpdmVuIGEgc3RyaW5nIG9yIG9iamVjdCwgY29udmVydCB0aGF0IGlucHV0IHRvIFJHQlxuLy8gUG9zc2libGUgc3RyaW5nIGlucHV0czpcbi8vXG4vLyAgICAgXCJyZWRcIlxuLy8gICAgIFwiI2YwMFwiIG9yIFwiZjAwXCJcbi8vICAgICBcIiNmZjAwMDBcIiBvciBcImZmMDAwMFwiXG4vLyAgICAgXCIjZmYwMDAwMDBcIiBvciBcImZmMDAwMDAwXCJcbi8vICAgICBcInJnYiAyNTUgMCAwXCIgb3IgXCJyZ2IgKDI1NSwgMCwgMClcIlxuLy8gICAgIFwicmdiIDEuMCAwIDBcIiBvciBcInJnYiAoMSwgMCwgMClcIlxuLy8gICAgIFwicmdiYSAoMjU1LCAwLCAwLCAxKVwiIG9yIFwicmdiYSAyNTUsIDAsIDAsIDFcIlxuLy8gICAgIFwicmdiYSAoMS4wLCAwLCAwLCAxKVwiIG9yIFwicmdiYSAxLjAsIDAsIDAsIDFcIlxuLy8gICAgIFwiaHNsKDAsIDEwMCUsIDUwJSlcIiBvciBcImhzbCAwIDEwMCUgNTAlXCJcbi8vICAgICBcImhzbGEoMCwgMTAwJSwgNTAlLCAxKVwiIG9yIFwiaHNsYSAwIDEwMCUgNTAlLCAxXCJcbi8vICAgICBcImhzdigwLCAxMDAlLCAxMDAlKVwiIG9yIFwiaHN2IDAgMTAwJSAxMDAlXCJcbi8vXG5mdW5jdGlvbiBpbnB1dFRvUkdCKGNvbG9yKSB7XG5cbiAgICB2YXIgcmdiID0geyByOiAwLCBnOiAwLCBiOiAwIH07XG4gICAgdmFyIGEgPSAxO1xuICAgIHZhciBzID0gbnVsbDtcbiAgICB2YXIgdiA9IG51bGw7XG4gICAgdmFyIGwgPSBudWxsO1xuICAgIHZhciBvayA9IGZhbHNlO1xuICAgIHZhciBmb3JtYXQgPSBmYWxzZTtcblxuICAgIGlmICh0eXBlb2YgY29sb3IgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb2xvciA9IHN0cmluZ0lucHV0VG9PYmplY3QoY29sb3IpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29sb3IgPT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAoaXNWYWxpZENTU1VuaXQoY29sb3IucikgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IuZykgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IuYikpIHtcbiAgICAgICAgICAgIHJnYiA9IHJnYlRvUmdiKGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIpO1xuICAgICAgICAgICAgb2sgPSB0cnVlO1xuICAgICAgICAgICAgZm9ybWF0ID0gU3RyaW5nKGNvbG9yLnIpLnN1YnN0cigtMSkgPT09IFwiJVwiID8gXCJwcmdiXCIgOiBcInJnYlwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzVmFsaWRDU1NVbml0KGNvbG9yLmgpICYmIGlzVmFsaWRDU1NVbml0KGNvbG9yLnMpICYmIGlzVmFsaWRDU1NVbml0KGNvbG9yLnYpKSB7XG4gICAgICAgICAgICBzID0gY29udmVydFRvUGVyY2VudGFnZShjb2xvci5zKTtcbiAgICAgICAgICAgIHYgPSBjb252ZXJ0VG9QZXJjZW50YWdlKGNvbG9yLnYpO1xuICAgICAgICAgICAgcmdiID0gaHN2VG9SZ2IoY29sb3IuaCwgcywgdik7XG4gICAgICAgICAgICBvayA9IHRydWU7XG4gICAgICAgICAgICBmb3JtYXQgPSBcImhzdlwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzVmFsaWRDU1NVbml0KGNvbG9yLmgpICYmIGlzVmFsaWRDU1NVbml0KGNvbG9yLnMpICYmIGlzVmFsaWRDU1NVbml0KGNvbG9yLmwpKSB7XG4gICAgICAgICAgICBzID0gY29udmVydFRvUGVyY2VudGFnZShjb2xvci5zKTtcbiAgICAgICAgICAgIGwgPSBjb252ZXJ0VG9QZXJjZW50YWdlKGNvbG9yLmwpO1xuICAgICAgICAgICAgcmdiID0gaHNsVG9SZ2IoY29sb3IuaCwgcywgbCk7XG4gICAgICAgICAgICBvayA9IHRydWU7XG4gICAgICAgICAgICBmb3JtYXQgPSBcImhzbFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbG9yLmhhc093blByb3BlcnR5KFwiYVwiKSkge1xuICAgICAgICAgICAgYSA9IGNvbG9yLmE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhID0gYm91bmRBbHBoYShhKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIG9rOiBvayxcbiAgICAgICAgZm9ybWF0OiBjb2xvci5mb3JtYXQgfHwgZm9ybWF0LFxuICAgICAgICByOiBtYXRoTWluKDI1NSwgbWF0aE1heChyZ2IuciwgMCkpLFxuICAgICAgICBnOiBtYXRoTWluKDI1NSwgbWF0aE1heChyZ2IuZywgMCkpLFxuICAgICAgICBiOiBtYXRoTWluKDI1NSwgbWF0aE1heChyZ2IuYiwgMCkpLFxuICAgICAgICBhOiBhXG4gICAgfTtcbn1cblxuXG4vLyBDb252ZXJzaW9uIEZ1bmN0aW9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gYHJnYlRvSHNsYCwgYHJnYlRvSHN2YCwgYGhzbFRvUmdiYCwgYGhzdlRvUmdiYCBtb2RpZmllZCBmcm9tOlxuLy8gPGh0dHA6Ly9tamlqYWNrc29uLmNvbS8yMDA4LzAyL3JnYi10by1oc2wtYW5kLXJnYi10by1oc3YtY29sb3ItbW9kZWwtY29udmVyc2lvbi1hbGdvcml0aG1zLWluLWphdmFzY3JpcHQ+XG5cbi8vIGByZ2JUb1JnYmBcbi8vIEhhbmRsZSBib3VuZHMgLyBwZXJjZW50YWdlIGNoZWNraW5nIHRvIGNvbmZvcm0gdG8gQ1NTIGNvbG9yIHNwZWNcbi8vIDxodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWNvbG9yLz5cbi8vICpBc3N1bWVzOiogciwgZywgYiBpbiBbMCwgMjU1XSBvciBbMCwgMV1cbi8vICpSZXR1cm5zOiogeyByLCBnLCBiIH0gaW4gWzAsIDI1NV1cbmZ1bmN0aW9uIHJnYlRvUmdiKHIsIGcsIGIpe1xuICAgIHJldHVybiB7XG4gICAgICAgIHI6IGJvdW5kMDEociwgMjU1KSAqIDI1NSxcbiAgICAgICAgZzogYm91bmQwMShnLCAyNTUpICogMjU1LFxuICAgICAgICBiOiBib3VuZDAxKGIsIDI1NSkgKiAyNTVcbiAgICB9O1xufVxuXG4vLyBgcmdiVG9Ic2xgXG4vLyBDb252ZXJ0cyBhbiBSR0IgY29sb3IgdmFsdWUgdG8gSFNMLlxuLy8gKkFzc3VtZXM6KiByLCBnLCBhbmQgYiBhcmUgY29udGFpbmVkIGluIFswLCAyNTVdIG9yIFswLCAxXVxuLy8gKlJldHVybnM6KiB7IGgsIHMsIGwgfSBpbiBbMCwxXVxuZnVuY3Rpb24gcmdiVG9Ic2wociwgZywgYikge1xuXG4gICAgciA9IGJvdW5kMDEociwgMjU1KTtcbiAgICBnID0gYm91bmQwMShnLCAyNTUpO1xuICAgIGIgPSBib3VuZDAxKGIsIDI1NSk7XG5cbiAgICB2YXIgbWF4ID0gbWF0aE1heChyLCBnLCBiKSwgbWluID0gbWF0aE1pbihyLCBnLCBiKTtcbiAgICB2YXIgaCwgcywgbCA9IChtYXggKyBtaW4pIC8gMjtcblxuICAgIGlmKG1heCA9PSBtaW4pIHtcbiAgICAgICAgaCA9IHMgPSAwOyAvLyBhY2hyb21hdGljXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgZCA9IG1heCAtIG1pbjtcbiAgICAgICAgcyA9IGwgPiAwLjUgPyBkIC8gKDIgLSBtYXggLSBtaW4pIDogZCAvIChtYXggKyBtaW4pO1xuICAgICAgICBzd2l0Y2gobWF4KSB7XG4gICAgICAgICAgICBjYXNlIHI6IGggPSAoZyAtIGIpIC8gZCArIChnIDwgYiA/IDYgOiAwKTsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGc6IGggPSAoYiAtIHIpIC8gZCArIDI7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBiOiBoID0gKHIgLSBnKSAvIGQgKyA0OyBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGggLz0gNjtcbiAgICB9XG5cbiAgICByZXR1cm4geyBoOiBoLCBzOiBzLCBsOiBsIH07XG59XG5cbi8vIGBoc2xUb1JnYmBcbi8vIENvbnZlcnRzIGFuIEhTTCBjb2xvciB2YWx1ZSB0byBSR0IuXG4vLyAqQXNzdW1lczoqIGggaXMgY29udGFpbmVkIGluIFswLCAxXSBvciBbMCwgMzYwXSBhbmQgcyBhbmQgbCBhcmUgY29udGFpbmVkIFswLCAxXSBvciBbMCwgMTAwXVxuLy8gKlJldHVybnM6KiB7IHIsIGcsIGIgfSBpbiB0aGUgc2V0IFswLCAyNTVdXG5mdW5jdGlvbiBoc2xUb1JnYihoLCBzLCBsKSB7XG4gICAgdmFyIHIsIGcsIGI7XG5cbiAgICBoID0gYm91bmQwMShoLCAzNjApO1xuICAgIHMgPSBib3VuZDAxKHMsIDEwMCk7XG4gICAgbCA9IGJvdW5kMDEobCwgMTAwKTtcblxuICAgIGZ1bmN0aW9uIGh1ZTJyZ2IocCwgcSwgdCkge1xuICAgICAgICBpZih0IDwgMCkgdCArPSAxO1xuICAgICAgICBpZih0ID4gMSkgdCAtPSAxO1xuICAgICAgICBpZih0IDwgMS82KSByZXR1cm4gcCArIChxIC0gcCkgKiA2ICogdDtcbiAgICAgICAgaWYodCA8IDEvMikgcmV0dXJuIHE7XG4gICAgICAgIGlmKHQgPCAyLzMpIHJldHVybiBwICsgKHEgLSBwKSAqICgyLzMgLSB0KSAqIDY7XG4gICAgICAgIHJldHVybiBwO1xuICAgIH1cblxuICAgIGlmKHMgPT09IDApIHtcbiAgICAgICAgciA9IGcgPSBiID0gbDsgLy8gYWNocm9tYXRpY1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHEgPSBsIDwgMC41ID8gbCAqICgxICsgcykgOiBsICsgcyAtIGwgKiBzO1xuICAgICAgICB2YXIgcCA9IDIgKiBsIC0gcTtcbiAgICAgICAgciA9IGh1ZTJyZ2IocCwgcSwgaCArIDEvMyk7XG4gICAgICAgIGcgPSBodWUycmdiKHAsIHEsIGgpO1xuICAgICAgICBiID0gaHVlMnJnYihwLCBxLCBoIC0gMS8zKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyByOiByICogMjU1LCBnOiBnICogMjU1LCBiOiBiICogMjU1IH07XG59XG5cbi8vIGByZ2JUb0hzdmBcbi8vIENvbnZlcnRzIGFuIFJHQiBjb2xvciB2YWx1ZSB0byBIU1Zcbi8vICpBc3N1bWVzOiogciwgZywgYW5kIGIgYXJlIGNvbnRhaW5lZCBpbiB0aGUgc2V0IFswLCAyNTVdIG9yIFswLCAxXVxuLy8gKlJldHVybnM6KiB7IGgsIHMsIHYgfSBpbiBbMCwxXVxuZnVuY3Rpb24gcmdiVG9Ic3YociwgZywgYikge1xuXG4gICAgciA9IGJvdW5kMDEociwgMjU1KTtcbiAgICBnID0gYm91bmQwMShnLCAyNTUpO1xuICAgIGIgPSBib3VuZDAxKGIsIDI1NSk7XG5cbiAgICB2YXIgbWF4ID0gbWF0aE1heChyLCBnLCBiKSwgbWluID0gbWF0aE1pbihyLCBnLCBiKTtcbiAgICB2YXIgaCwgcywgdiA9IG1heDtcblxuICAgIHZhciBkID0gbWF4IC0gbWluO1xuICAgIHMgPSBtYXggPT09IDAgPyAwIDogZCAvIG1heDtcblxuICAgIGlmKG1heCA9PSBtaW4pIHtcbiAgICAgICAgaCA9IDA7IC8vIGFjaHJvbWF0aWNcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHN3aXRjaChtYXgpIHtcbiAgICAgICAgICAgIGNhc2UgcjogaCA9IChnIC0gYikgLyBkICsgKGcgPCBiID8gNiA6IDApOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgZzogaCA9IChiIC0gcikgLyBkICsgMjsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGI6IGggPSAociAtIGcpIC8gZCArIDQ7IGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGggLz0gNjtcbiAgICB9XG4gICAgcmV0dXJuIHsgaDogaCwgczogcywgdjogdiB9O1xufVxuXG4vLyBgaHN2VG9SZ2JgXG4vLyBDb252ZXJ0cyBhbiBIU1YgY29sb3IgdmFsdWUgdG8gUkdCLlxuLy8gKkFzc3VtZXM6KiBoIGlzIGNvbnRhaW5lZCBpbiBbMCwgMV0gb3IgWzAsIDM2MF0gYW5kIHMgYW5kIHYgYXJlIGNvbnRhaW5lZCBpbiBbMCwgMV0gb3IgWzAsIDEwMF1cbi8vICpSZXR1cm5zOiogeyByLCBnLCBiIH0gaW4gdGhlIHNldCBbMCwgMjU1XVxuIGZ1bmN0aW9uIGhzdlRvUmdiKGgsIHMsIHYpIHtcblxuICAgIGggPSBib3VuZDAxKGgsIDM2MCkgKiA2O1xuICAgIHMgPSBib3VuZDAxKHMsIDEwMCk7XG4gICAgdiA9IGJvdW5kMDEodiwgMTAwKTtcblxuICAgIHZhciBpID0gTWF0aC5mbG9vcihoKSxcbiAgICAgICAgZiA9IGggLSBpLFxuICAgICAgICBwID0gdiAqICgxIC0gcyksXG4gICAgICAgIHEgPSB2ICogKDEgLSBmICogcyksXG4gICAgICAgIHQgPSB2ICogKDEgLSAoMSAtIGYpICogcyksXG4gICAgICAgIG1vZCA9IGkgJSA2LFxuICAgICAgICByID0gW3YsIHEsIHAsIHAsIHQsIHZdW21vZF0sXG4gICAgICAgIGcgPSBbdCwgdiwgdiwgcSwgcCwgcF1bbW9kXSxcbiAgICAgICAgYiA9IFtwLCBwLCB0LCB2LCB2LCBxXVttb2RdO1xuXG4gICAgcmV0dXJuIHsgcjogciAqIDI1NSwgZzogZyAqIDI1NSwgYjogYiAqIDI1NSB9O1xufVxuXG4vLyBgcmdiVG9IZXhgXG4vLyBDb252ZXJ0cyBhbiBSR0IgY29sb3IgdG8gaGV4XG4vLyBBc3N1bWVzIHIsIGcsIGFuZCBiIGFyZSBjb250YWluZWQgaW4gdGhlIHNldCBbMCwgMjU1XVxuLy8gUmV0dXJucyBhIDMgb3IgNiBjaGFyYWN0ZXIgaGV4XG5mdW5jdGlvbiByZ2JUb0hleChyLCBnLCBiLCBhbGxvdzNDaGFyKSB7XG5cbiAgICB2YXIgaGV4ID0gW1xuICAgICAgICBwYWQyKG1hdGhSb3VuZChyKS50b1N0cmluZygxNikpLFxuICAgICAgICBwYWQyKG1hdGhSb3VuZChnKS50b1N0cmluZygxNikpLFxuICAgICAgICBwYWQyKG1hdGhSb3VuZChiKS50b1N0cmluZygxNikpXG4gICAgXTtcblxuICAgIC8vIFJldHVybiBhIDMgY2hhcmFjdGVyIGhleCBpZiBwb3NzaWJsZVxuICAgIGlmIChhbGxvdzNDaGFyICYmIGhleFswXS5jaGFyQXQoMCkgPT0gaGV4WzBdLmNoYXJBdCgxKSAmJiBoZXhbMV0uY2hhckF0KDApID09IGhleFsxXS5jaGFyQXQoMSkgJiYgaGV4WzJdLmNoYXJBdCgwKSA9PSBoZXhbMl0uY2hhckF0KDEpKSB7XG4gICAgICAgIHJldHVybiBoZXhbMF0uY2hhckF0KDApICsgaGV4WzFdLmNoYXJBdCgwKSArIGhleFsyXS5jaGFyQXQoMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhleC5qb2luKFwiXCIpO1xufVxuXG4vLyBgcmdiYVRvSGV4YFxuLy8gQ29udmVydHMgYW4gUkdCQSBjb2xvciBwbHVzIGFscGhhIHRyYW5zcGFyZW5jeSB0byBoZXhcbi8vIEFzc3VtZXMgciwgZywgYiBhcmUgY29udGFpbmVkIGluIHRoZSBzZXQgWzAsIDI1NV0gYW5kXG4vLyBhIGluIFswLCAxXS4gUmV0dXJucyBhIDQgb3IgOCBjaGFyYWN0ZXIgcmdiYSBoZXhcbmZ1bmN0aW9uIHJnYmFUb0hleChyLCBnLCBiLCBhLCBhbGxvdzRDaGFyKSB7XG5cbiAgICB2YXIgaGV4ID0gW1xuICAgICAgICBwYWQyKG1hdGhSb3VuZChyKS50b1N0cmluZygxNikpLFxuICAgICAgICBwYWQyKG1hdGhSb3VuZChnKS50b1N0cmluZygxNikpLFxuICAgICAgICBwYWQyKG1hdGhSb3VuZChiKS50b1N0cmluZygxNikpLFxuICAgICAgICBwYWQyKGNvbnZlcnREZWNpbWFsVG9IZXgoYSkpXG4gICAgXTtcblxuICAgIC8vIFJldHVybiBhIDQgY2hhcmFjdGVyIGhleCBpZiBwb3NzaWJsZVxuICAgIGlmIChhbGxvdzRDaGFyICYmIGhleFswXS5jaGFyQXQoMCkgPT0gaGV4WzBdLmNoYXJBdCgxKSAmJiBoZXhbMV0uY2hhckF0KDApID09IGhleFsxXS5jaGFyQXQoMSkgJiYgaGV4WzJdLmNoYXJBdCgwKSA9PSBoZXhbMl0uY2hhckF0KDEpICYmIGhleFszXS5jaGFyQXQoMCkgPT0gaGV4WzNdLmNoYXJBdCgxKSkge1xuICAgICAgICByZXR1cm4gaGV4WzBdLmNoYXJBdCgwKSArIGhleFsxXS5jaGFyQXQoMCkgKyBoZXhbMl0uY2hhckF0KDApICsgaGV4WzNdLmNoYXJBdCgwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGV4LmpvaW4oXCJcIik7XG59XG5cbi8vIGByZ2JhVG9BcmdiSGV4YFxuLy8gQ29udmVydHMgYW4gUkdCQSBjb2xvciB0byBhbiBBUkdCIEhleDggc3RyaW5nXG4vLyBSYXJlbHkgdXNlZCwgYnV0IHJlcXVpcmVkIGZvciBcInRvRmlsdGVyKClcIlxuZnVuY3Rpb24gcmdiYVRvQXJnYkhleChyLCBnLCBiLCBhKSB7XG5cbiAgICB2YXIgaGV4ID0gW1xuICAgICAgICBwYWQyKGNvbnZlcnREZWNpbWFsVG9IZXgoYSkpLFxuICAgICAgICBwYWQyKG1hdGhSb3VuZChyKS50b1N0cmluZygxNikpLFxuICAgICAgICBwYWQyKG1hdGhSb3VuZChnKS50b1N0cmluZygxNikpLFxuICAgICAgICBwYWQyKG1hdGhSb3VuZChiKS50b1N0cmluZygxNikpXG4gICAgXTtcblxuICAgIHJldHVybiBoZXguam9pbihcIlwiKTtcbn1cblxuLy8gYGVxdWFsc2Bcbi8vIENhbiBiZSBjYWxsZWQgd2l0aCBhbnkgdGlueWNvbG9yIGlucHV0XG50aW55Y29sb3IuZXF1YWxzID0gZnVuY3Rpb24gKGNvbG9yMSwgY29sb3IyKSB7XG4gICAgaWYgKCFjb2xvcjEgfHwgIWNvbG9yMikgeyByZXR1cm4gZmFsc2U7IH1cbiAgICByZXR1cm4gdGlueWNvbG9yKGNvbG9yMSkudG9SZ2JTdHJpbmcoKSA9PSB0aW55Y29sb3IoY29sb3IyKS50b1JnYlN0cmluZygpO1xufTtcblxudGlueWNvbG9yLnJhbmRvbSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aW55Y29sb3IuZnJvbVJhdGlvKHtcbiAgICAgICAgcjogbWF0aFJhbmRvbSgpLFxuICAgICAgICBnOiBtYXRoUmFuZG9tKCksXG4gICAgICAgIGI6IG1hdGhSYW5kb20oKVxuICAgIH0pO1xufTtcblxuXG4vLyBNb2RpZmljYXRpb24gRnVuY3Rpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUaGFua3MgdG8gbGVzcy5qcyBmb3Igc29tZSBvZiB0aGUgYmFzaWNzIGhlcmVcbi8vIDxodHRwczovL2dpdGh1Yi5jb20vY2xvdWRoZWFkL2xlc3MuanMvYmxvYi9tYXN0ZXIvbGliL2xlc3MvZnVuY3Rpb25zLmpzPlxuXG5mdW5jdGlvbiBkZXNhdHVyYXRlKGNvbG9yLCBhbW91bnQpIHtcbiAgICBhbW91bnQgPSAoYW1vdW50ID09PSAwKSA/IDAgOiAoYW1vdW50IHx8IDEwKTtcbiAgICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICAgIGhzbC5zIC09IGFtb3VudCAvIDEwMDtcbiAgICBoc2wucyA9IGNsYW1wMDEoaHNsLnMpO1xuICAgIHJldHVybiB0aW55Y29sb3IoaHNsKTtcbn1cblxuZnVuY3Rpb24gc2F0dXJhdGUoY29sb3IsIGFtb3VudCkge1xuICAgIGFtb3VudCA9IChhbW91bnQgPT09IDApID8gMCA6IChhbW91bnQgfHwgMTApO1xuICAgIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gICAgaHNsLnMgKz0gYW1vdW50IC8gMTAwO1xuICAgIGhzbC5zID0gY2xhbXAwMShoc2wucyk7XG4gICAgcmV0dXJuIHRpbnljb2xvcihoc2wpO1xufVxuXG5mdW5jdGlvbiBncmV5c2NhbGUoY29sb3IpIHtcbiAgICByZXR1cm4gdGlueWNvbG9yKGNvbG9yKS5kZXNhdHVyYXRlKDEwMCk7XG59XG5cbmZ1bmN0aW9uIGxpZ2h0ZW4gKGNvbG9yLCBhbW91bnQpIHtcbiAgICBhbW91bnQgPSAoYW1vdW50ID09PSAwKSA/IDAgOiAoYW1vdW50IHx8IDEwKTtcbiAgICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICAgIGhzbC5sICs9IGFtb3VudCAvIDEwMDtcbiAgICBoc2wubCA9IGNsYW1wMDEoaHNsLmwpO1xuICAgIHJldHVybiB0aW55Y29sb3IoaHNsKTtcbn1cblxuZnVuY3Rpb24gYnJpZ2h0ZW4oY29sb3IsIGFtb3VudCkge1xuICAgIGFtb3VudCA9IChhbW91bnQgPT09IDApID8gMCA6IChhbW91bnQgfHwgMTApO1xuICAgIHZhciByZ2IgPSB0aW55Y29sb3IoY29sb3IpLnRvUmdiKCk7XG4gICAgcmdiLnIgPSBtYXRoTWF4KDAsIG1hdGhNaW4oMjU1LCByZ2IuciAtIG1hdGhSb3VuZCgyNTUgKiAtIChhbW91bnQgLyAxMDApKSkpO1xuICAgIHJnYi5nID0gbWF0aE1heCgwLCBtYXRoTWluKDI1NSwgcmdiLmcgLSBtYXRoUm91bmQoMjU1ICogLSAoYW1vdW50IC8gMTAwKSkpKTtcbiAgICByZ2IuYiA9IG1hdGhNYXgoMCwgbWF0aE1pbigyNTUsIHJnYi5iIC0gbWF0aFJvdW5kKDI1NSAqIC0gKGFtb3VudCAvIDEwMCkpKSk7XG4gICAgcmV0dXJuIHRpbnljb2xvcihyZ2IpO1xufVxuXG5mdW5jdGlvbiBkYXJrZW4gKGNvbG9yLCBhbW91bnQpIHtcbiAgICBhbW91bnQgPSAoYW1vdW50ID09PSAwKSA/IDAgOiAoYW1vdW50IHx8IDEwKTtcbiAgICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICAgIGhzbC5sIC09IGFtb3VudCAvIDEwMDtcbiAgICBoc2wubCA9IGNsYW1wMDEoaHNsLmwpO1xuICAgIHJldHVybiB0aW55Y29sb3IoaHNsKTtcbn1cblxuLy8gU3BpbiB0YWtlcyBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGFtb3VudCB3aXRoaW4gWy0zNjAsIDM2MF0gaW5kaWNhdGluZyB0aGUgY2hhbmdlIG9mIGh1ZS5cbi8vIFZhbHVlcyBvdXRzaWRlIG9mIHRoaXMgcmFuZ2Ugd2lsbCBiZSB3cmFwcGVkIGludG8gdGhpcyByYW5nZS5cbmZ1bmN0aW9uIHNwaW4oY29sb3IsIGFtb3VudCkge1xuICAgIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gICAgdmFyIGh1ZSA9IChoc2wuaCArIGFtb3VudCkgJSAzNjA7XG4gICAgaHNsLmggPSBodWUgPCAwID8gMzYwICsgaHVlIDogaHVlO1xuICAgIHJldHVybiB0aW55Y29sb3IoaHNsKTtcbn1cblxuLy8gQ29tYmluYXRpb24gRnVuY3Rpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRoYW5rcyB0byBqUXVlcnkgeENvbG9yIGZvciBzb21lIG9mIHRoZSBpZGVhcyBiZWhpbmQgdGhlc2Vcbi8vIDxodHRwczovL2dpdGh1Yi5jb20vaW5mdXNpb24valF1ZXJ5LXhjb2xvci9ibG9iL21hc3Rlci9qcXVlcnkueGNvbG9yLmpzPlxuXG5mdW5jdGlvbiBjb21wbGVtZW50KGNvbG9yKSB7XG4gICAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgICBoc2wuaCA9IChoc2wuaCArIDE4MCkgJSAzNjA7XG4gICAgcmV0dXJuIHRpbnljb2xvcihoc2wpO1xufVxuXG5mdW5jdGlvbiB0cmlhZChjb2xvcikge1xuICAgIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gICAgdmFyIGggPSBoc2wuaDtcbiAgICByZXR1cm4gW1xuICAgICAgICB0aW55Y29sb3IoY29sb3IpLFxuICAgICAgICB0aW55Y29sb3IoeyBoOiAoaCArIDEyMCkgJSAzNjAsIHM6IGhzbC5zLCBsOiBoc2wubCB9KSxcbiAgICAgICAgdGlueWNvbG9yKHsgaDogKGggKyAyNDApICUgMzYwLCBzOiBoc2wucywgbDogaHNsLmwgfSlcbiAgICBdO1xufVxuXG5mdW5jdGlvbiB0ZXRyYWQoY29sb3IpIHtcbiAgICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICAgIHZhciBoID0gaHNsLmg7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgdGlueWNvbG9yKGNvbG9yKSxcbiAgICAgICAgdGlueWNvbG9yKHsgaDogKGggKyA5MCkgJSAzNjAsIHM6IGhzbC5zLCBsOiBoc2wubCB9KSxcbiAgICAgICAgdGlueWNvbG9yKHsgaDogKGggKyAxODApICUgMzYwLCBzOiBoc2wucywgbDogaHNsLmwgfSksXG4gICAgICAgIHRpbnljb2xvcih7IGg6IChoICsgMjcwKSAlIDM2MCwgczogaHNsLnMsIGw6IGhzbC5sIH0pXG4gICAgXTtcbn1cblxuZnVuY3Rpb24gc3BsaXRjb21wbGVtZW50KGNvbG9yKSB7XG4gICAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgICB2YXIgaCA9IGhzbC5oO1xuICAgIHJldHVybiBbXG4gICAgICAgIHRpbnljb2xvcihjb2xvciksXG4gICAgICAgIHRpbnljb2xvcih7IGg6IChoICsgNzIpICUgMzYwLCBzOiBoc2wucywgbDogaHNsLmx9KSxcbiAgICAgICAgdGlueWNvbG9yKHsgaDogKGggKyAyMTYpICUgMzYwLCBzOiBoc2wucywgbDogaHNsLmx9KVxuICAgIF07XG59XG5cbmZ1bmN0aW9uIGFuYWxvZ291cyhjb2xvciwgcmVzdWx0cywgc2xpY2VzKSB7XG4gICAgcmVzdWx0cyA9IHJlc3VsdHMgfHwgNjtcbiAgICBzbGljZXMgPSBzbGljZXMgfHwgMzA7XG5cbiAgICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICAgIHZhciBwYXJ0ID0gMzYwIC8gc2xpY2VzO1xuICAgIHZhciByZXQgPSBbdGlueWNvbG9yKGNvbG9yKV07XG5cbiAgICBmb3IgKGhzbC5oID0gKChoc2wuaCAtIChwYXJ0ICogcmVzdWx0cyA+PiAxKSkgKyA3MjApICUgMzYwOyAtLXJlc3VsdHM7ICkge1xuICAgICAgICBoc2wuaCA9IChoc2wuaCArIHBhcnQpICUgMzYwO1xuICAgICAgICByZXQucHVzaCh0aW55Y29sb3IoaHNsKSk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIG1vbm9jaHJvbWF0aWMoY29sb3IsIHJlc3VsdHMpIHtcbiAgICByZXN1bHRzID0gcmVzdWx0cyB8fCA2O1xuICAgIHZhciBoc3YgPSB0aW55Y29sb3IoY29sb3IpLnRvSHN2KCk7XG4gICAgdmFyIGggPSBoc3YuaCwgcyA9IGhzdi5zLCB2ID0gaHN2LnY7XG4gICAgdmFyIHJldCA9IFtdO1xuICAgIHZhciBtb2RpZmljYXRpb24gPSAxIC8gcmVzdWx0cztcblxuICAgIHdoaWxlIChyZXN1bHRzLS0pIHtcbiAgICAgICAgcmV0LnB1c2godGlueWNvbG9yKHsgaDogaCwgczogcywgdjogdn0pKTtcbiAgICAgICAgdiA9ICh2ICsgbW9kaWZpY2F0aW9uKSAlIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbn1cblxuLy8gVXRpbGl0eSBGdW5jdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50aW55Y29sb3IubWl4ID0gZnVuY3Rpb24oY29sb3IxLCBjb2xvcjIsIGFtb3VudCkge1xuICAgIGFtb3VudCA9IChhbW91bnQgPT09IDApID8gMCA6IChhbW91bnQgfHwgNTApO1xuXG4gICAgdmFyIHJnYjEgPSB0aW55Y29sb3IoY29sb3IxKS50b1JnYigpO1xuICAgIHZhciByZ2IyID0gdGlueWNvbG9yKGNvbG9yMikudG9SZ2IoKTtcblxuICAgIHZhciBwID0gYW1vdW50IC8gMTAwO1xuXG4gICAgdmFyIHJnYmEgPSB7XG4gICAgICAgIHI6ICgocmdiMi5yIC0gcmdiMS5yKSAqIHApICsgcmdiMS5yLFxuICAgICAgICBnOiAoKHJnYjIuZyAtIHJnYjEuZykgKiBwKSArIHJnYjEuZyxcbiAgICAgICAgYjogKChyZ2IyLmIgLSByZ2IxLmIpICogcCkgKyByZ2IxLmIsXG4gICAgICAgIGE6ICgocmdiMi5hIC0gcmdiMS5hKSAqIHApICsgcmdiMS5hXG4gICAgfTtcblxuICAgIHJldHVybiB0aW55Y29sb3IocmdiYSk7XG59O1xuXG5cbi8vIFJlYWRhYmlsaXR5IEZ1bmN0aW9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyA8aHR0cDovL3d3dy53My5vcmcvVFIvMjAwOC9SRUMtV0NBRzIwLTIwMDgxMjExLyNjb250cmFzdC1yYXRpb2RlZiAoV0NBRyBWZXJzaW9uIDIpXG5cbi8vIGBjb250cmFzdGBcbi8vIEFuYWx5emUgdGhlIDIgY29sb3JzIGFuZCByZXR1cm5zIHRoZSBjb2xvciBjb250cmFzdCBkZWZpbmVkIGJ5IChXQ0FHIFZlcnNpb24gMilcbnRpbnljb2xvci5yZWFkYWJpbGl0eSA9IGZ1bmN0aW9uKGNvbG9yMSwgY29sb3IyKSB7XG4gICAgdmFyIGMxID0gdGlueWNvbG9yKGNvbG9yMSk7XG4gICAgdmFyIGMyID0gdGlueWNvbG9yKGNvbG9yMik7XG4gICAgcmV0dXJuIChNYXRoLm1heChjMS5nZXRMdW1pbmFuY2UoKSxjMi5nZXRMdW1pbmFuY2UoKSkrMC4wNSkgLyAoTWF0aC5taW4oYzEuZ2V0THVtaW5hbmNlKCksYzIuZ2V0THVtaW5hbmNlKCkpKzAuMDUpO1xufTtcblxuLy8gYGlzUmVhZGFibGVgXG4vLyBFbnN1cmUgdGhhdCBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGNvbG9yIGNvbWJpbmF0aW9ucyBtZWV0IFdDQUcyIGd1aWRlbGluZXMuXG4vLyBUaGUgdGhpcmQgYXJndW1lbnQgaXMgYW4gb3B0aW9uYWwgT2JqZWN0LlxuLy8gICAgICB0aGUgJ2xldmVsJyBwcm9wZXJ0eSBzdGF0ZXMgJ0FBJyBvciAnQUFBJyAtIGlmIG1pc3Npbmcgb3IgaW52YWxpZCwgaXQgZGVmYXVsdHMgdG8gJ0FBJztcbi8vICAgICAgdGhlICdzaXplJyBwcm9wZXJ0eSBzdGF0ZXMgJ2xhcmdlJyBvciAnc21hbGwnIC0gaWYgbWlzc2luZyBvciBpbnZhbGlkLCBpdCBkZWZhdWx0cyB0byAnc21hbGwnLlxuLy8gSWYgdGhlIGVudGlyZSBvYmplY3QgaXMgYWJzZW50LCBpc1JlYWRhYmxlIGRlZmF1bHRzIHRvIHtsZXZlbDpcIkFBXCIsc2l6ZTpcInNtYWxsXCJ9LlxuXG4vLyAqRXhhbXBsZSpcbi8vICAgIHRpbnljb2xvci5pc1JlYWRhYmxlKFwiIzAwMFwiLCBcIiMxMTFcIikgPT4gZmFsc2Vcbi8vICAgIHRpbnljb2xvci5pc1JlYWRhYmxlKFwiIzAwMFwiLCBcIiMxMTFcIix7bGV2ZWw6XCJBQVwiLHNpemU6XCJsYXJnZVwifSkgPT4gZmFsc2VcbnRpbnljb2xvci5pc1JlYWRhYmxlID0gZnVuY3Rpb24oY29sb3IxLCBjb2xvcjIsIHdjYWcyKSB7XG4gICAgdmFyIHJlYWRhYmlsaXR5ID0gdGlueWNvbG9yLnJlYWRhYmlsaXR5KGNvbG9yMSwgY29sb3IyKTtcbiAgICB2YXIgd2NhZzJQYXJtcywgb3V0O1xuXG4gICAgb3V0ID0gZmFsc2U7XG5cbiAgICB3Y2FnMlBhcm1zID0gdmFsaWRhdGVXQ0FHMlBhcm1zKHdjYWcyKTtcbiAgICBzd2l0Y2ggKHdjYWcyUGFybXMubGV2ZWwgKyB3Y2FnMlBhcm1zLnNpemUpIHtcbiAgICAgICAgY2FzZSBcIkFBc21hbGxcIjpcbiAgICAgICAgY2FzZSBcIkFBQWxhcmdlXCI6XG4gICAgICAgICAgICBvdXQgPSByZWFkYWJpbGl0eSA+PSA0LjU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkFBbGFyZ2VcIjpcbiAgICAgICAgICAgIG91dCA9IHJlYWRhYmlsaXR5ID49IDM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkFBQXNtYWxsXCI6XG4gICAgICAgICAgICBvdXQgPSByZWFkYWJpbGl0eSA+PSA3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG5cbn07XG5cbi8vIGBtb3N0UmVhZGFibGVgXG4vLyBHaXZlbiBhIGJhc2UgY29sb3IgYW5kIGEgbGlzdCBvZiBwb3NzaWJsZSBmb3JlZ3JvdW5kIG9yIGJhY2tncm91bmRcbi8vIGNvbG9ycyBmb3IgdGhhdCBiYXNlLCByZXR1cm5zIHRoZSBtb3N0IHJlYWRhYmxlIGNvbG9yLlxuLy8gT3B0aW9uYWxseSByZXR1cm5zIEJsYWNrIG9yIFdoaXRlIGlmIHRoZSBtb3N0IHJlYWRhYmxlIGNvbG9yIGlzIHVucmVhZGFibGUuXG4vLyAqRXhhbXBsZSpcbi8vICAgIHRpbnljb2xvci5tb3N0UmVhZGFibGUodGlueWNvbG9yLm1vc3RSZWFkYWJsZShcIiMxMjNcIiwgW1wiIzEyNFwiLCBcIiMxMjVcIl0se2luY2x1ZGVGYWxsYmFja0NvbG9yczpmYWxzZX0pLnRvSGV4U3RyaW5nKCk7IC8vIFwiIzExMjI1NVwiXG4vLyAgICB0aW55Y29sb3IubW9zdFJlYWRhYmxlKHRpbnljb2xvci5tb3N0UmVhZGFibGUoXCIjMTIzXCIsIFtcIiMxMjRcIiwgXCIjMTI1XCJdLHtpbmNsdWRlRmFsbGJhY2tDb2xvcnM6dHJ1ZX0pLnRvSGV4U3RyaW5nKCk7ICAvLyBcIiNmZmZmZmZcIlxuLy8gICAgdGlueWNvbG9yLm1vc3RSZWFkYWJsZShcIiNhODAxNWFcIiwgW1wiI2ZhZjNmM1wiXSx7aW5jbHVkZUZhbGxiYWNrQ29sb3JzOnRydWUsbGV2ZWw6XCJBQUFcIixzaXplOlwibGFyZ2VcIn0pLnRvSGV4U3RyaW5nKCk7IC8vIFwiI2ZhZjNmM1wiXG4vLyAgICB0aW55Y29sb3IubW9zdFJlYWRhYmxlKFwiI2E4MDE1YVwiLCBbXCIjZmFmM2YzXCJdLHtpbmNsdWRlRmFsbGJhY2tDb2xvcnM6dHJ1ZSxsZXZlbDpcIkFBQVwiLHNpemU6XCJzbWFsbFwifSkudG9IZXhTdHJpbmcoKTsgLy8gXCIjZmZmZmZmXCJcbnRpbnljb2xvci5tb3N0UmVhZGFibGUgPSBmdW5jdGlvbihiYXNlQ29sb3IsIGNvbG9yTGlzdCwgYXJncykge1xuICAgIHZhciBiZXN0Q29sb3IgPSBudWxsO1xuICAgIHZhciBiZXN0U2NvcmUgPSAwO1xuICAgIHZhciByZWFkYWJpbGl0eTtcbiAgICB2YXIgaW5jbHVkZUZhbGxiYWNrQ29sb3JzLCBsZXZlbCwgc2l6ZSA7XG4gICAgYXJncyA9IGFyZ3MgfHwge307XG4gICAgaW5jbHVkZUZhbGxiYWNrQ29sb3JzID0gYXJncy5pbmNsdWRlRmFsbGJhY2tDb2xvcnMgO1xuICAgIGxldmVsID0gYXJncy5sZXZlbDtcbiAgICBzaXplID0gYXJncy5zaXplO1xuXG4gICAgZm9yICh2YXIgaT0gMDsgaSA8IGNvbG9yTGlzdC5sZW5ndGggOyBpKyspIHtcbiAgICAgICAgcmVhZGFiaWxpdHkgPSB0aW55Y29sb3IucmVhZGFiaWxpdHkoYmFzZUNvbG9yLCBjb2xvckxpc3RbaV0pO1xuICAgICAgICBpZiAocmVhZGFiaWxpdHkgPiBiZXN0U2NvcmUpIHtcbiAgICAgICAgICAgIGJlc3RTY29yZSA9IHJlYWRhYmlsaXR5O1xuICAgICAgICAgICAgYmVzdENvbG9yID0gdGlueWNvbG9yKGNvbG9yTGlzdFtpXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGlueWNvbG9yLmlzUmVhZGFibGUoYmFzZUNvbG9yLCBiZXN0Q29sb3IsIHtcImxldmVsXCI6bGV2ZWwsXCJzaXplXCI6c2l6ZX0pIHx8ICFpbmNsdWRlRmFsbGJhY2tDb2xvcnMpIHtcbiAgICAgICAgcmV0dXJuIGJlc3RDb2xvcjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFyZ3MuaW5jbHVkZUZhbGxiYWNrQ29sb3JzPWZhbHNlO1xuICAgICAgICByZXR1cm4gdGlueWNvbG9yLm1vc3RSZWFkYWJsZShiYXNlQ29sb3IsW1wiI2ZmZlwiLCBcIiMwMDBcIl0sYXJncyk7XG4gICAgfVxufTtcblxuXG4vLyBCaWcgTGlzdCBvZiBDb2xvcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gPGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtY29sb3IvI3N2Zy1jb2xvcj5cbnZhciBuYW1lcyA9IHRpbnljb2xvci5uYW1lcyA9IHtcbiAgICBhbGljZWJsdWU6IFwiZjBmOGZmXCIsXG4gICAgYW50aXF1ZXdoaXRlOiBcImZhZWJkN1wiLFxuICAgIGFxdWE6IFwiMGZmXCIsXG4gICAgYXF1YW1hcmluZTogXCI3ZmZmZDRcIixcbiAgICBhenVyZTogXCJmMGZmZmZcIixcbiAgICBiZWlnZTogXCJmNWY1ZGNcIixcbiAgICBiaXNxdWU6IFwiZmZlNGM0XCIsXG4gICAgYmxhY2s6IFwiMDAwXCIsXG4gICAgYmxhbmNoZWRhbG1vbmQ6IFwiZmZlYmNkXCIsXG4gICAgYmx1ZTogXCIwMGZcIixcbiAgICBibHVldmlvbGV0OiBcIjhhMmJlMlwiLFxuICAgIGJyb3duOiBcImE1MmEyYVwiLFxuICAgIGJ1cmx5d29vZDogXCJkZWI4ODdcIixcbiAgICBidXJudHNpZW5uYTogXCJlYTdlNWRcIixcbiAgICBjYWRldGJsdWU6IFwiNWY5ZWEwXCIsXG4gICAgY2hhcnRyZXVzZTogXCI3ZmZmMDBcIixcbiAgICBjaG9jb2xhdGU6IFwiZDI2OTFlXCIsXG4gICAgY29yYWw6IFwiZmY3ZjUwXCIsXG4gICAgY29ybmZsb3dlcmJsdWU6IFwiNjQ5NWVkXCIsXG4gICAgY29ybnNpbGs6IFwiZmZmOGRjXCIsXG4gICAgY3JpbXNvbjogXCJkYzE0M2NcIixcbiAgICBjeWFuOiBcIjBmZlwiLFxuICAgIGRhcmtibHVlOiBcIjAwMDA4YlwiLFxuICAgIGRhcmtjeWFuOiBcIjAwOGI4YlwiLFxuICAgIGRhcmtnb2xkZW5yb2Q6IFwiYjg4NjBiXCIsXG4gICAgZGFya2dyYXk6IFwiYTlhOWE5XCIsXG4gICAgZGFya2dyZWVuOiBcIjAwNjQwMFwiLFxuICAgIGRhcmtncmV5OiBcImE5YTlhOVwiLFxuICAgIGRhcmtraGFraTogXCJiZGI3NmJcIixcbiAgICBkYXJrbWFnZW50YTogXCI4YjAwOGJcIixcbiAgICBkYXJrb2xpdmVncmVlbjogXCI1NTZiMmZcIixcbiAgICBkYXJrb3JhbmdlOiBcImZmOGMwMFwiLFxuICAgIGRhcmtvcmNoaWQ6IFwiOTkzMmNjXCIsXG4gICAgZGFya3JlZDogXCI4YjAwMDBcIixcbiAgICBkYXJrc2FsbW9uOiBcImU5OTY3YVwiLFxuICAgIGRhcmtzZWFncmVlbjogXCI4ZmJjOGZcIixcbiAgICBkYXJrc2xhdGVibHVlOiBcIjQ4M2Q4YlwiLFxuICAgIGRhcmtzbGF0ZWdyYXk6IFwiMmY0ZjRmXCIsXG4gICAgZGFya3NsYXRlZ3JleTogXCIyZjRmNGZcIixcbiAgICBkYXJrdHVycXVvaXNlOiBcIjAwY2VkMVwiLFxuICAgIGRhcmt2aW9sZXQ6IFwiOTQwMGQzXCIsXG4gICAgZGVlcHBpbms6IFwiZmYxNDkzXCIsXG4gICAgZGVlcHNreWJsdWU6IFwiMDBiZmZmXCIsXG4gICAgZGltZ3JheTogXCI2OTY5NjlcIixcbiAgICBkaW1ncmV5OiBcIjY5Njk2OVwiLFxuICAgIGRvZGdlcmJsdWU6IFwiMWU5MGZmXCIsXG4gICAgZmlyZWJyaWNrOiBcImIyMjIyMlwiLFxuICAgIGZsb3JhbHdoaXRlOiBcImZmZmFmMFwiLFxuICAgIGZvcmVzdGdyZWVuOiBcIjIyOGIyMlwiLFxuICAgIGZ1Y2hzaWE6IFwiZjBmXCIsXG4gICAgZ2FpbnNib3JvOiBcImRjZGNkY1wiLFxuICAgIGdob3N0d2hpdGU6IFwiZjhmOGZmXCIsXG4gICAgZ29sZDogXCJmZmQ3MDBcIixcbiAgICBnb2xkZW5yb2Q6IFwiZGFhNTIwXCIsXG4gICAgZ3JheTogXCI4MDgwODBcIixcbiAgICBncmVlbjogXCIwMDgwMDBcIixcbiAgICBncmVlbnllbGxvdzogXCJhZGZmMmZcIixcbiAgICBncmV5OiBcIjgwODA4MFwiLFxuICAgIGhvbmV5ZGV3OiBcImYwZmZmMFwiLFxuICAgIGhvdHBpbms6IFwiZmY2OWI0XCIsXG4gICAgaW5kaWFucmVkOiBcImNkNWM1Y1wiLFxuICAgIGluZGlnbzogXCI0YjAwODJcIixcbiAgICBpdm9yeTogXCJmZmZmZjBcIixcbiAgICBraGFraTogXCJmMGU2OGNcIixcbiAgICBsYXZlbmRlcjogXCJlNmU2ZmFcIixcbiAgICBsYXZlbmRlcmJsdXNoOiBcImZmZjBmNVwiLFxuICAgIGxhd25ncmVlbjogXCI3Y2ZjMDBcIixcbiAgICBsZW1vbmNoaWZmb246IFwiZmZmYWNkXCIsXG4gICAgbGlnaHRibHVlOiBcImFkZDhlNlwiLFxuICAgIGxpZ2h0Y29yYWw6IFwiZjA4MDgwXCIsXG4gICAgbGlnaHRjeWFuOiBcImUwZmZmZlwiLFxuICAgIGxpZ2h0Z29sZGVucm9keWVsbG93OiBcImZhZmFkMlwiLFxuICAgIGxpZ2h0Z3JheTogXCJkM2QzZDNcIixcbiAgICBsaWdodGdyZWVuOiBcIjkwZWU5MFwiLFxuICAgIGxpZ2h0Z3JleTogXCJkM2QzZDNcIixcbiAgICBsaWdodHBpbms6IFwiZmZiNmMxXCIsXG4gICAgbGlnaHRzYWxtb246IFwiZmZhMDdhXCIsXG4gICAgbGlnaHRzZWFncmVlbjogXCIyMGIyYWFcIixcbiAgICBsaWdodHNreWJsdWU6IFwiODdjZWZhXCIsXG4gICAgbGlnaHRzbGF0ZWdyYXk6IFwiNzg5XCIsXG4gICAgbGlnaHRzbGF0ZWdyZXk6IFwiNzg5XCIsXG4gICAgbGlnaHRzdGVlbGJsdWU6IFwiYjBjNGRlXCIsXG4gICAgbGlnaHR5ZWxsb3c6IFwiZmZmZmUwXCIsXG4gICAgbGltZTogXCIwZjBcIixcbiAgICBsaW1lZ3JlZW46IFwiMzJjZDMyXCIsXG4gICAgbGluZW46IFwiZmFmMGU2XCIsXG4gICAgbWFnZW50YTogXCJmMGZcIixcbiAgICBtYXJvb246IFwiODAwMDAwXCIsXG4gICAgbWVkaXVtYXF1YW1hcmluZTogXCI2NmNkYWFcIixcbiAgICBtZWRpdW1ibHVlOiBcIjAwMDBjZFwiLFxuICAgIG1lZGl1bW9yY2hpZDogXCJiYTU1ZDNcIixcbiAgICBtZWRpdW1wdXJwbGU6IFwiOTM3MGRiXCIsXG4gICAgbWVkaXVtc2VhZ3JlZW46IFwiM2NiMzcxXCIsXG4gICAgbWVkaXVtc2xhdGVibHVlOiBcIjdiNjhlZVwiLFxuICAgIG1lZGl1bXNwcmluZ2dyZWVuOiBcIjAwZmE5YVwiLFxuICAgIG1lZGl1bXR1cnF1b2lzZTogXCI0OGQxY2NcIixcbiAgICBtZWRpdW12aW9sZXRyZWQ6IFwiYzcxNTg1XCIsXG4gICAgbWlkbmlnaHRibHVlOiBcIjE5MTk3MFwiLFxuICAgIG1pbnRjcmVhbTogXCJmNWZmZmFcIixcbiAgICBtaXN0eXJvc2U6IFwiZmZlNGUxXCIsXG4gICAgbW9jY2FzaW46IFwiZmZlNGI1XCIsXG4gICAgbmF2YWpvd2hpdGU6IFwiZmZkZWFkXCIsXG4gICAgbmF2eTogXCIwMDAwODBcIixcbiAgICBvbGRsYWNlOiBcImZkZjVlNlwiLFxuICAgIG9saXZlOiBcIjgwODAwMFwiLFxuICAgIG9saXZlZHJhYjogXCI2YjhlMjNcIixcbiAgICBvcmFuZ2U6IFwiZmZhNTAwXCIsXG4gICAgb3JhbmdlcmVkOiBcImZmNDUwMFwiLFxuICAgIG9yY2hpZDogXCJkYTcwZDZcIixcbiAgICBwYWxlZ29sZGVucm9kOiBcImVlZThhYVwiLFxuICAgIHBhbGVncmVlbjogXCI5OGZiOThcIixcbiAgICBwYWxldHVycXVvaXNlOiBcImFmZWVlZVwiLFxuICAgIHBhbGV2aW9sZXRyZWQ6IFwiZGI3MDkzXCIsXG4gICAgcGFwYXlhd2hpcDogXCJmZmVmZDVcIixcbiAgICBwZWFjaHB1ZmY6IFwiZmZkYWI5XCIsXG4gICAgcGVydTogXCJjZDg1M2ZcIixcbiAgICBwaW5rOiBcImZmYzBjYlwiLFxuICAgIHBsdW06IFwiZGRhMGRkXCIsXG4gICAgcG93ZGVyYmx1ZTogXCJiMGUwZTZcIixcbiAgICBwdXJwbGU6IFwiODAwMDgwXCIsXG4gICAgcmViZWNjYXB1cnBsZTogXCI2NjMzOTlcIixcbiAgICByZWQ6IFwiZjAwXCIsXG4gICAgcm9zeWJyb3duOiBcImJjOGY4ZlwiLFxuICAgIHJveWFsYmx1ZTogXCI0MTY5ZTFcIixcbiAgICBzYWRkbGVicm93bjogXCI4YjQ1MTNcIixcbiAgICBzYWxtb246IFwiZmE4MDcyXCIsXG4gICAgc2FuZHlicm93bjogXCJmNGE0NjBcIixcbiAgICBzZWFncmVlbjogXCIyZThiNTdcIixcbiAgICBzZWFzaGVsbDogXCJmZmY1ZWVcIixcbiAgICBzaWVubmE6IFwiYTA1MjJkXCIsXG4gICAgc2lsdmVyOiBcImMwYzBjMFwiLFxuICAgIHNreWJsdWU6IFwiODdjZWViXCIsXG4gICAgc2xhdGVibHVlOiBcIjZhNWFjZFwiLFxuICAgIHNsYXRlZ3JheTogXCI3MDgwOTBcIixcbiAgICBzbGF0ZWdyZXk6IFwiNzA4MDkwXCIsXG4gICAgc25vdzogXCJmZmZhZmFcIixcbiAgICBzcHJpbmdncmVlbjogXCIwMGZmN2ZcIixcbiAgICBzdGVlbGJsdWU6IFwiNDY4MmI0XCIsXG4gICAgdGFuOiBcImQyYjQ4Y1wiLFxuICAgIHRlYWw6IFwiMDA4MDgwXCIsXG4gICAgdGhpc3RsZTogXCJkOGJmZDhcIixcbiAgICB0b21hdG86IFwiZmY2MzQ3XCIsXG4gICAgdHVycXVvaXNlOiBcIjQwZTBkMFwiLFxuICAgIHZpb2xldDogXCJlZTgyZWVcIixcbiAgICB3aGVhdDogXCJmNWRlYjNcIixcbiAgICB3aGl0ZTogXCJmZmZcIixcbiAgICB3aGl0ZXNtb2tlOiBcImY1ZjVmNVwiLFxuICAgIHllbGxvdzogXCJmZjBcIixcbiAgICB5ZWxsb3dncmVlbjogXCI5YWNkMzJcIlxufTtcblxuLy8gTWFrZSBpdCBlYXN5IHRvIGFjY2VzcyBjb2xvcnMgdmlhIGBoZXhOYW1lc1toZXhdYFxudmFyIGhleE5hbWVzID0gdGlueWNvbG9yLmhleE5hbWVzID0gZmxpcChuYW1lcyk7XG5cblxuLy8gVXRpbGl0aWVzXG4vLyAtLS0tLS0tLS1cblxuLy8gYHsgJ25hbWUxJzogJ3ZhbDEnIH1gIGJlY29tZXMgYHsgJ3ZhbDEnOiAnbmFtZTEnIH1gXG5mdW5jdGlvbiBmbGlwKG8pIHtcbiAgICB2YXIgZmxpcHBlZCA9IHsgfTtcbiAgICBmb3IgKHZhciBpIGluIG8pIHtcbiAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICAgIGZsaXBwZWRbb1tpXV0gPSBpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmbGlwcGVkO1xufVxuXG4vLyBSZXR1cm4gYSB2YWxpZCBhbHBoYSB2YWx1ZSBbMCwxXSB3aXRoIGFsbCBpbnZhbGlkIHZhbHVlcyBiZWluZyBzZXQgdG8gMVxuZnVuY3Rpb24gYm91bmRBbHBoYShhKSB7XG4gICAgYSA9IHBhcnNlRmxvYXQoYSk7XG5cbiAgICBpZiAoaXNOYU4oYSkgfHwgYSA8IDAgfHwgYSA+IDEpIHtcbiAgICAgICAgYSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGE7XG59XG5cbi8vIFRha2UgaW5wdXQgZnJvbSBbMCwgbl0gYW5kIHJldHVybiBpdCBhcyBbMCwgMV1cbmZ1bmN0aW9uIGJvdW5kMDEobiwgbWF4KSB7XG4gICAgaWYgKGlzT25lUG9pbnRaZXJvKG4pKSB7IG4gPSBcIjEwMCVcIjsgfVxuXG4gICAgdmFyIHByb2Nlc3NQZXJjZW50ID0gaXNQZXJjZW50YWdlKG4pO1xuICAgIG4gPSBtYXRoTWluKG1heCwgbWF0aE1heCgwLCBwYXJzZUZsb2F0KG4pKSk7XG5cbiAgICAvLyBBdXRvbWF0aWNhbGx5IGNvbnZlcnQgcGVyY2VudGFnZSBpbnRvIG51bWJlclxuICAgIGlmIChwcm9jZXNzUGVyY2VudCkge1xuICAgICAgICBuID0gcGFyc2VJbnQobiAqIG1heCwgMTApIC8gMTAwO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBmbG9hdGluZyBwb2ludCByb3VuZGluZyBlcnJvcnNcbiAgICBpZiAoKE1hdGguYWJzKG4gLSBtYXgpIDwgMC4wMDAwMDEpKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIC8vIENvbnZlcnQgaW50byBbMCwgMV0gcmFuZ2UgaWYgaXQgaXNuJ3QgYWxyZWFkeVxuICAgIHJldHVybiAobiAlIG1heCkgLyBwYXJzZUZsb2F0KG1heCk7XG59XG5cbi8vIEZvcmNlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMVxuZnVuY3Rpb24gY2xhbXAwMSh2YWwpIHtcbiAgICByZXR1cm4gbWF0aE1pbigxLCBtYXRoTWF4KDAsIHZhbCkpO1xufVxuXG4vLyBQYXJzZSBhIGJhc2UtMTYgaGV4IHZhbHVlIGludG8gYSBiYXNlLTEwIGludGVnZXJcbmZ1bmN0aW9uIHBhcnNlSW50RnJvbUhleCh2YWwpIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodmFsLCAxNik7XG59XG5cbi8vIE5lZWQgdG8gaGFuZGxlIDEuMCBhcyAxMDAlLCBzaW5jZSBvbmNlIGl0IGlzIGEgbnVtYmVyLCB0aGVyZSBpcyBubyBkaWZmZXJlbmNlIGJldHdlZW4gaXQgYW5kIDFcbi8vIDxodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc0MjIwNzIvamF2YXNjcmlwdC1ob3ctdG8tZGV0ZWN0LW51bWJlci1hcy1hLWRlY2ltYWwtaW5jbHVkaW5nLTEtMD5cbmZ1bmN0aW9uIGlzT25lUG9pbnRaZXJvKG4pIHtcbiAgICByZXR1cm4gdHlwZW9mIG4gPT0gXCJzdHJpbmdcIiAmJiBuLmluZGV4T2YoJy4nKSAhPSAtMSAmJiBwYXJzZUZsb2F0KG4pID09PSAxO1xufVxuXG4vLyBDaGVjayB0byBzZWUgaWYgc3RyaW5nIHBhc3NlZCBpbiBpcyBhIHBlcmNlbnRhZ2VcbmZ1bmN0aW9uIGlzUGVyY2VudGFnZShuKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBuID09PSBcInN0cmluZ1wiICYmIG4uaW5kZXhPZignJScpICE9IC0xO1xufVxuXG4vLyBGb3JjZSBhIGhleCB2YWx1ZSB0byBoYXZlIDIgY2hhcmFjdGVyc1xuZnVuY3Rpb24gcGFkMihjKSB7XG4gICAgcmV0dXJuIGMubGVuZ3RoID09IDEgPyAnMCcgKyBjIDogJycgKyBjO1xufVxuXG4vLyBSZXBsYWNlIGEgZGVjaW1hbCB3aXRoIGl0J3MgcGVyY2VudGFnZSB2YWx1ZVxuZnVuY3Rpb24gY29udmVydFRvUGVyY2VudGFnZShuKSB7XG4gICAgaWYgKG4gPD0gMSkge1xuICAgICAgICBuID0gKG4gKiAxMDApICsgXCIlXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIG47XG59XG5cbi8vIENvbnZlcnRzIGEgZGVjaW1hbCB0byBhIGhleCB2YWx1ZVxuZnVuY3Rpb24gY29udmVydERlY2ltYWxUb0hleChkKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdChkKSAqIDI1NSkudG9TdHJpbmcoMTYpO1xufVxuLy8gQ29udmVydHMgYSBoZXggdmFsdWUgdG8gYSBkZWNpbWFsXG5mdW5jdGlvbiBjb252ZXJ0SGV4VG9EZWNpbWFsKGgpIHtcbiAgICByZXR1cm4gKHBhcnNlSW50RnJvbUhleChoKSAvIDI1NSk7XG59XG5cbnZhciBtYXRjaGVycyA9IChmdW5jdGlvbigpIHtcblxuICAgIC8vIDxodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXZhbHVlcy8jaW50ZWdlcnM+XG4gICAgdmFyIENTU19JTlRFR0VSID0gXCJbLVxcXFwrXT9cXFxcZCslP1wiO1xuXG4gICAgLy8gPGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtdmFsdWVzLyNudW1iZXItdmFsdWU+XG4gICAgdmFyIENTU19OVU1CRVIgPSBcIlstXFxcXCtdP1xcXFxkKlxcXFwuXFxcXGQrJT9cIjtcblxuICAgIC8vIEFsbG93IHBvc2l0aXZlL25lZ2F0aXZlIGludGVnZXIvbnVtYmVyLiAgRG9uJ3QgY2FwdHVyZSB0aGUgZWl0aGVyL29yLCBqdXN0IHRoZSBlbnRpcmUgb3V0Y29tZS5cbiAgICB2YXIgQ1NTX1VOSVQgPSBcIig/OlwiICsgQ1NTX05VTUJFUiArIFwiKXwoPzpcIiArIENTU19JTlRFR0VSICsgXCIpXCI7XG5cbiAgICAvLyBBY3R1YWwgbWF0Y2hpbmcuXG4gICAgLy8gUGFyZW50aGVzZXMgYW5kIGNvbW1hcyBhcmUgb3B0aW9uYWwsIGJ1dCBub3QgcmVxdWlyZWQuXG4gICAgLy8gV2hpdGVzcGFjZSBjYW4gdGFrZSB0aGUgcGxhY2Ugb2YgY29tbWFzIG9yIG9wZW5pbmcgcGFyZW5cbiAgICB2YXIgUEVSTUlTU0lWRV9NQVRDSDMgPSBcIltcXFxcc3xcXFxcKF0rKFwiICsgQ1NTX1VOSVQgKyBcIilbLHxcXFxcc10rKFwiICsgQ1NTX1VOSVQgKyBcIilbLHxcXFxcc10rKFwiICsgQ1NTX1VOSVQgKyBcIilcXFxccypcXFxcKT9cIjtcbiAgICB2YXIgUEVSTUlTU0lWRV9NQVRDSDQgPSBcIltcXFxcc3xcXFxcKF0rKFwiICsgQ1NTX1VOSVQgKyBcIilbLHxcXFxcc10rKFwiICsgQ1NTX1VOSVQgKyBcIilbLHxcXFxcc10rKFwiICsgQ1NTX1VOSVQgKyBcIilbLHxcXFxcc10rKFwiICsgQ1NTX1VOSVQgKyBcIilcXFxccypcXFxcKT9cIjtcblxuICAgIHJldHVybiB7XG4gICAgICAgIENTU19VTklUOiBuZXcgUmVnRXhwKENTU19VTklUKSxcbiAgICAgICAgcmdiOiBuZXcgUmVnRXhwKFwicmdiXCIgKyBQRVJNSVNTSVZFX01BVENIMyksXG4gICAgICAgIHJnYmE6IG5ldyBSZWdFeHAoXCJyZ2JhXCIgKyBQRVJNSVNTSVZFX01BVENINCksXG4gICAgICAgIGhzbDogbmV3IFJlZ0V4cChcImhzbFwiICsgUEVSTUlTU0lWRV9NQVRDSDMpLFxuICAgICAgICBoc2xhOiBuZXcgUmVnRXhwKFwiaHNsYVwiICsgUEVSTUlTU0lWRV9NQVRDSDQpLFxuICAgICAgICBoc3Y6IG5ldyBSZWdFeHAoXCJoc3ZcIiArIFBFUk1JU1NJVkVfTUFUQ0gzKSxcbiAgICAgICAgaHN2YTogbmV3IFJlZ0V4cChcImhzdmFcIiArIFBFUk1JU1NJVkVfTUFUQ0g0KSxcbiAgICAgICAgaGV4MzogL14jPyhbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KSQvLFxuICAgICAgICBoZXg2OiAvXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pJC8sXG4gICAgICAgIGhleDQ6IC9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8sXG4gICAgICAgIGhleDg6IC9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pJC9cbiAgICB9O1xufSkoKTtcblxuLy8gYGlzVmFsaWRDU1NVbml0YFxuLy8gVGFrZSBpbiBhIHNpbmdsZSBzdHJpbmcgLyBudW1iZXIgYW5kIGNoZWNrIHRvIHNlZSBpZiBpdCBsb29rcyBsaWtlIGEgQ1NTIHVuaXRcbi8vIChzZWUgYG1hdGNoZXJzYCBhYm92ZSBmb3IgZGVmaW5pdGlvbikuXG5mdW5jdGlvbiBpc1ZhbGlkQ1NTVW5pdChjb2xvcikge1xuICAgIHJldHVybiAhIW1hdGNoZXJzLkNTU19VTklULmV4ZWMoY29sb3IpO1xufVxuXG4vLyBgc3RyaW5nSW5wdXRUb09iamVjdGBcbi8vIFBlcm1pc3NpdmUgc3RyaW5nIHBhcnNpbmcuICBUYWtlIGluIGEgbnVtYmVyIG9mIGZvcm1hdHMsIGFuZCBvdXRwdXQgYW4gb2JqZWN0XG4vLyBiYXNlZCBvbiBkZXRlY3RlZCBmb3JtYXQuICBSZXR1cm5zIGB7IHIsIGcsIGIgfWAgb3IgYHsgaCwgcywgbCB9YCBvciBgeyBoLCBzLCB2fWBcbmZ1bmN0aW9uIHN0cmluZ0lucHV0VG9PYmplY3QoY29sb3IpIHtcblxuICAgIGNvbG9yID0gY29sb3IucmVwbGFjZSh0cmltTGVmdCwnJykucmVwbGFjZSh0cmltUmlnaHQsICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBuYW1lZCA9IGZhbHNlO1xuICAgIGlmIChuYW1lc1tjb2xvcl0pIHtcbiAgICAgICAgY29sb3IgPSBuYW1lc1tjb2xvcl07XG4gICAgICAgIG5hbWVkID0gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY29sb3IgPT0gJ3RyYW5zcGFyZW50Jykge1xuICAgICAgICByZXR1cm4geyByOiAwLCBnOiAwLCBiOiAwLCBhOiAwLCBmb3JtYXQ6IFwibmFtZVwiIH07XG4gICAgfVxuXG4gICAgLy8gVHJ5IHRvIG1hdGNoIHN0cmluZyBpbnB1dCB1c2luZyByZWd1bGFyIGV4cHJlc3Npb25zLlxuICAgIC8vIEtlZXAgbW9zdCBvZiB0aGUgbnVtYmVyIGJvdW5kaW5nIG91dCBvZiB0aGlzIGZ1bmN0aW9uIC0gZG9uJ3Qgd29ycnkgYWJvdXQgWzAsMV0gb3IgWzAsMTAwXSBvciBbMCwzNjBdXG4gICAgLy8gSnVzdCByZXR1cm4gYW4gb2JqZWN0IGFuZCBsZXQgdGhlIGNvbnZlcnNpb24gZnVuY3Rpb25zIGhhbmRsZSB0aGF0LlxuICAgIC8vIFRoaXMgd2F5IHRoZSByZXN1bHQgd2lsbCBiZSB0aGUgc2FtZSB3aGV0aGVyIHRoZSB0aW55Y29sb3IgaXMgaW5pdGlhbGl6ZWQgd2l0aCBzdHJpbmcgb3Igb2JqZWN0LlxuICAgIHZhciBtYXRjaDtcbiAgICBpZiAoKG1hdGNoID0gbWF0Y2hlcnMucmdiLmV4ZWMoY29sb3IpKSkge1xuICAgICAgICByZXR1cm4geyByOiBtYXRjaFsxXSwgZzogbWF0Y2hbMl0sIGI6IG1hdGNoWzNdIH07XG4gICAgfVxuICAgIGlmICgobWF0Y2ggPSBtYXRjaGVycy5yZ2JhLmV4ZWMoY29sb3IpKSkge1xuICAgICAgICByZXR1cm4geyByOiBtYXRjaFsxXSwgZzogbWF0Y2hbMl0sIGI6IG1hdGNoWzNdLCBhOiBtYXRjaFs0XSB9O1xuICAgIH1cbiAgICBpZiAoKG1hdGNoID0gbWF0Y2hlcnMuaHNsLmV4ZWMoY29sb3IpKSkge1xuICAgICAgICByZXR1cm4geyBoOiBtYXRjaFsxXSwgczogbWF0Y2hbMl0sIGw6IG1hdGNoWzNdIH07XG4gICAgfVxuICAgIGlmICgobWF0Y2ggPSBtYXRjaGVycy5oc2xhLmV4ZWMoY29sb3IpKSkge1xuICAgICAgICByZXR1cm4geyBoOiBtYXRjaFsxXSwgczogbWF0Y2hbMl0sIGw6IG1hdGNoWzNdLCBhOiBtYXRjaFs0XSB9O1xuICAgIH1cbiAgICBpZiAoKG1hdGNoID0gbWF0Y2hlcnMuaHN2LmV4ZWMoY29sb3IpKSkge1xuICAgICAgICByZXR1cm4geyBoOiBtYXRjaFsxXSwgczogbWF0Y2hbMl0sIHY6IG1hdGNoWzNdIH07XG4gICAgfVxuICAgIGlmICgobWF0Y2ggPSBtYXRjaGVycy5oc3ZhLmV4ZWMoY29sb3IpKSkge1xuICAgICAgICByZXR1cm4geyBoOiBtYXRjaFsxXSwgczogbWF0Y2hbMl0sIHY6IG1hdGNoWzNdLCBhOiBtYXRjaFs0XSB9O1xuICAgIH1cbiAgICBpZiAoKG1hdGNoID0gbWF0Y2hlcnMuaGV4OC5leGVjKGNvbG9yKSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHI6IHBhcnNlSW50RnJvbUhleChtYXRjaFsxXSksXG4gICAgICAgICAgICBnOiBwYXJzZUludEZyb21IZXgobWF0Y2hbMl0pLFxuICAgICAgICAgICAgYjogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzNdKSxcbiAgICAgICAgICAgIGE6IGNvbnZlcnRIZXhUb0RlY2ltYWwobWF0Y2hbNF0pLFxuICAgICAgICAgICAgZm9ybWF0OiBuYW1lZCA/IFwibmFtZVwiIDogXCJoZXg4XCJcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLmhleDYuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByOiBwYXJzZUludEZyb21IZXgobWF0Y2hbMV0pLFxuICAgICAgICAgICAgZzogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzJdKSxcbiAgICAgICAgICAgIGI6IHBhcnNlSW50RnJvbUhleChtYXRjaFszXSksXG4gICAgICAgICAgICBmb3JtYXQ6IG5hbWVkID8gXCJuYW1lXCIgOiBcImhleFwiXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmICgobWF0Y2ggPSBtYXRjaGVycy5oZXg0LmV4ZWMoY29sb3IpKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcjogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzFdICsgJycgKyBtYXRjaFsxXSksXG4gICAgICAgICAgICBnOiBwYXJzZUludEZyb21IZXgobWF0Y2hbMl0gKyAnJyArIG1hdGNoWzJdKSxcbiAgICAgICAgICAgIGI6IHBhcnNlSW50RnJvbUhleChtYXRjaFszXSArICcnICsgbWF0Y2hbM10pLFxuICAgICAgICAgICAgYTogY29udmVydEhleFRvRGVjaW1hbChtYXRjaFs0XSArICcnICsgbWF0Y2hbNF0pLFxuICAgICAgICAgICAgZm9ybWF0OiBuYW1lZCA/IFwibmFtZVwiIDogXCJoZXg4XCJcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLmhleDMuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByOiBwYXJzZUludEZyb21IZXgobWF0Y2hbMV0gKyAnJyArIG1hdGNoWzFdKSxcbiAgICAgICAgICAgIGc6IHBhcnNlSW50RnJvbUhleChtYXRjaFsyXSArICcnICsgbWF0Y2hbMl0pLFxuICAgICAgICAgICAgYjogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzNdICsgJycgKyBtYXRjaFszXSksXG4gICAgICAgICAgICBmb3JtYXQ6IG5hbWVkID8gXCJuYW1lXCIgOiBcImhleFwiXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVdDQUcyUGFybXMocGFybXMpIHtcbiAgICAvLyByZXR1cm4gdmFsaWQgV0NBRzIgcGFybXMgZm9yIGlzUmVhZGFibGUuXG4gICAgLy8gSWYgaW5wdXQgcGFybXMgYXJlIGludmFsaWQsIHJldHVybiB7XCJsZXZlbFwiOlwiQUFcIiwgXCJzaXplXCI6XCJzbWFsbFwifVxuICAgIHZhciBsZXZlbCwgc2l6ZTtcbiAgICBwYXJtcyA9IHBhcm1zIHx8IHtcImxldmVsXCI6XCJBQVwiLCBcInNpemVcIjpcInNtYWxsXCJ9O1xuICAgIGxldmVsID0gKHBhcm1zLmxldmVsIHx8IFwiQUFcIikudG9VcHBlckNhc2UoKTtcbiAgICBzaXplID0gKHBhcm1zLnNpemUgfHwgXCJzbWFsbFwiKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsZXZlbCAhPT0gXCJBQVwiICYmIGxldmVsICE9PSBcIkFBQVwiKSB7XG4gICAgICAgIGxldmVsID0gXCJBQVwiO1xuICAgIH1cbiAgICBpZiAoc2l6ZSAhPT0gXCJzbWFsbFwiICYmIHNpemUgIT09IFwibGFyZ2VcIikge1xuICAgICAgICBzaXplID0gXCJzbWFsbFwiO1xuICAgIH1cbiAgICByZXR1cm4ge1wibGV2ZWxcIjpsZXZlbCwgXCJzaXplXCI6c2l6ZX07XG59XG5cbi8vIE5vZGU6IEV4cG9ydCBmdW5jdGlvblxuaWYgKHR5cGVvZiBtb2R1bGUgIT09IFwidW5kZWZpbmVkXCIgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHRpbnljb2xvcjtcbn1cbi8vIEFNRC9yZXF1aXJlanM6IERlZmluZSB0aGUgbW9kdWxlXG5lbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge3JldHVybiB0aW55Y29sb3I7fSk7XG59XG4vLyBCcm93c2VyOiBFeHBvc2UgdG8gd2luZG93XG5lbHNlIHtcbiAgICB3aW5kb3cudGlueWNvbG9yID0gdGlueWNvbG9yO1xufVxuXG59KShNYXRoKTtcbiIsIi8qKlxuICogV29yZFByZXNzIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQge1xuXHRQYW5lbEJvZHksXG5cdFJhbmdlQ29udHJvbCxcblx0UGF0aCxcblx0U1ZHLFxuXHRSZWN0LFxufSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAd29yZHByZXNzL2kxOG4nO1xuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHtcblx0Y3JlYXRlQmxvY2ssXG59IGZyb20gJ0B3b3JkcHJlc3MvYmxvY2tzJztcbmltcG9ydCB7XG5cdEluc3BlY3RvckNvbnRyb2xzLFxuXHRJbm5lckJsb2Nrcyxcbn0gZnJvbSAnQHdvcmRwcmVzcy9lZGl0b3InO1xuaW1wb3J0IHtcblx0c2VsZWN0XG59IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ2dlY2tvL2dyaWQtbGF5b3V0LWJhc2ljJztcblxuZXhwb3J0IGNvbnN0IHNldHRpbmdzID0ge1xuXHR0aXRsZTogX18oICdCYXNpYycgKSxcblxuXHRwYXJlbnQ6IFsnZ2Vja28vZ3JpZC1sYXlvdXQnXSxcblxuXHRpY29uOiA8U1ZHIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PFBhdGggZD1cIk0wLDBoMjR2MjRIMFYweiBNMCwwaDI0djI0SDBWMHpcIiBmaWxsPVwibm9uZVwiIC8+PFBhdGggZD1cIm0yMCA3djEwaC0xNnYtMTBoMTZtMC0yaC0xNmMtMS4xIDAtMS45OSAwLjktMS45OSAybC0wLjAxIDEwYzAgMS4xIDAuOSAyIDIgMmgxNmMxLjEgMCAyLTAuOSAyLTJ2LTEwYzAtMS4xLTAuOS0yLTItMnpcIiAvPjxSZWN0IHg9XCIxMVwiIHk9XCI4XCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIC8+PFJlY3QgeD1cIjExXCIgeT1cIjExXCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIC8+PFJlY3QgeD1cIjhcIiB5PVwiOFwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiAvPjxSZWN0IHg9XCI4XCIgeT1cIjExXCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIC8+PFJlY3QgeD1cIjVcIiB5PVwiMTFcIiB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIyXCIgLz48UmVjdCB4PVwiNVwiIHk9XCI4XCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIC8+PFJlY3QgeD1cIjhcIiB5PVwiMTRcIiB3aWR0aD1cIjhcIiBoZWlnaHQ9XCIyXCIgLz48UmVjdCB4PVwiMTRcIiB5PVwiMTFcIiB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIyXCIgLz48UmVjdCB4PVwiMTRcIiB5PVwiOFwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiAvPjxSZWN0IHg9XCIxN1wiIHk9XCIxMVwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiAvPjxSZWN0IHg9XCIxN1wiIHk9XCI4XCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIC8+PC9TVkc+LFxuXG5cdGRlc2NyaXB0aW9uOiBfXyggJ0FuIGltYWdlIEdyaWQgQmxvY2suJyApLFxuXG5cdGNhdGVnb3J5OiAnY29tbW9uJyxcblxuXHRzdXBwb3J0czoge1xuXHRcdGNsYXNzTmFtZTogdHJ1ZSxcblx0XHRpbnNlcnRlcjogdHJ1ZSxcblx0XHRyZXVzYWJsZTogZmFsc2UsXG5cdFx0aHRtbDogZmFsc2UsXG5cdH0sXG5cblx0c3R5bGVzOiBbXG5cdFx0eyBuYW1lOiAnZGVmYXVsdCcsIGxhYmVsOiBfXyggJ0RlZmF1bHQnKSwgaXNEZWZhdWx0OiB0cnVlIH0sXG5cdF0sXG5cblx0YXR0cmlidXRlczoge1xuXHRcdGg6IHsgdHlwZTogJ251bWJlcicsIGRlZmF1bHQ6IDF9LFxuXHRcdHc6IHsgdHlwZTogJ251bWJlcicsIGRlZmF1bHQ6IDF9LFxuXHR9LFxuXG5cdHRyYW5zZm9ybXM6IHtcblx0XHRmcm9tOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6ICdibG9jaycsXG5cdFx0XHRcdGJsb2NrczogWydnZWNrby9ncmlkLWxheW91dC1pdGVtJywgJ2dlY2tvL2dyaWQtbGF5b3V0LWltYWdlJ10sXG5cdFx0XHRcdHRyYW5zZm9ybTogKGF0dHJpYnV0ZXMsIGlubmVyQmxvY2tzKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgc2VsZWN0ZWQgPSBzZWxlY3QoJ2NvcmUvZWRpdG9yJykuZ2V0U2VsZWN0ZWRCbG9jaygpOyAvLyBiZWNhdXNlIGlubmVyQmxvY2tzIGRvZXMgbm90IHdvcmsuXG5cdFx0XHRcdFx0Ly8gSXQgYXBwZWFycyB0aGF0IGlubmVyQmxvY2tzIHdpbGwgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS5cblx0XHRcdFx0XHRjb25zdCB7aCwgd30gPSBhdHRyaWJ1dGVzO1xuXHRcdFx0XHRcdHJldHVybiBjcmVhdGVCbG9jaygnZ2Vja28vZ3JpZC1sYXlvdXQtYmFzaWMnLCB7XG5cdFx0XHRcdFx0XHRoOiBoLFxuXHRcdFx0XHRcdFx0dzogdyxcblx0XHRcdFx0XHR9LCBzZWxlY3RlZC5pbm5lckJsb2Nrcyk7XG5cdFx0XHRcdH0sXG5cdFx0XHR9LFx0XG5cdFx0XSxcblx0fSxcblxuXHRkZXByZWNhdGVkOiBbe1xuXHRcdG1pZ3JhdGUoKSB7fSxcblx0XHRzYXZlKCkge1xuXHRcdFx0cmV0dXJuIDxJbm5lckJsb2Nrcy5Db250ZW50IC8gPiA7XG5cdFx0fSxcblx0fV0sXG5cblx0ZWRpdCh7IGF0dHJpYnV0ZXMsIHNldEF0dHJpYnV0ZXMsIGNsYXNzTmFtZSwgaW5zZXJ0QmxvY2tzQWZ0ZXIgfSkge1xuXHRcdGNvbnN0IHtcblx0XHRcdGgsXG5cdFx0XHR3LFxuXHRcdH0gPSBhdHRyaWJ1dGVzO1xuXHRcdGNvbnN0IHN0eWxlcyA9IHtcblx0XHRcdGdyaWRDb2x1bW5FbmQ6ICdzcGFuICcrIHcsXG5cdFx0XHRncmlkUm93RW5kOiAnc3BhbiAnICsgaCxcblx0XHR9O1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdDxJbnNwZWN0b3JDb250cm9scz5cblx0XHRcdFx0XHQ8UGFuZWxCb2R5IHRpdGxlPVwiR3JpZCBJdGVtXCI+XG5cdFx0XHRcdFx0XHQ8UmFuZ2VDb250cm9sXG5cdFx0XHRcdFx0XHRcdGxhYmVsPXsgX18oICdXaWR0aCcgKSB9XG5cdFx0XHRcdFx0XHRcdHZhbHVlPXsgdyB9XG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsgKCBuZXh0ICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoIHtcblx0XHRcdFx0XHRcdFx0XHRcdHc6IG5leHQsXG5cdFx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0XHR9IH1cblx0XHRcdFx0XHRcdFx0bWluPXsgMSB9XG5cdFx0XHRcdFx0XHRcdG1heD17IDEyIH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8UmFuZ2VDb250cm9sXG5cdFx0XHRcdFx0XHRcdGxhYmVsPXsgX18oICdTcGFuIFJvd3MnICkgfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17IGggfVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17ICggbmV4dCApID0+IHtcblx0XHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRoOiBuZXh0LFxuXHRcdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHRcdG1pbj17IDEgfVxuXHRcdFx0XHRcdFx0XHRtYXg9eyAxMiB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvUGFuZWxCb2R5PlxuXHRcdFx0XHQ8L0luc3BlY3RvckNvbnRyb2xzPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT17YGdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvci1zdHlsZXNgfSBzdHlsZT17c3R5bGVzfT48L2Rpdj5cblx0XHRcdFx0PGRpdiAgY2xhc3NOYW1lPXtgd3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yX193cmFwIGdlY2tvLWdyaWQtbGF5b3V0LWJhc2ljICR7YXR0cmlidXRlcy5jbGFzc05hbWV9YH0+XG5cdFx0XHRcdFx0eyB0eXBlb2YgaW5zZXJ0QmxvY2tzQWZ0ZXIgPT09ICdmdW5jdGlvbicgLy9UaGlzIGxpbmUgbWFrZXMgc3VyZSBzdHlsZXMgZG8gbm90IGJyZWFrXG5cdFx0XHRcdFx0XHQ/IDxJbm5lckJsb2NrcyB0ZW1wbGF0ZUxvY2s9eyBmYWxzZSB9Lz5cblx0XHRcdFx0XHRcdDogPHA+TG9yZW0gSXBzdW08L3A+IC8vIFRoaXMgaXMgd2hhdCBzaG93cyBhcyB0aGUgcHJldmlldyBjb250ZW50LlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L0ZyYWdtZW50PlxuXHRcdCk7XG5cdH0sXG5cblx0c2F2ZSgpIHtcblx0XHRyZXR1cm4oPGRpdj48SW5uZXJCbG9ja3MuQ29udGVudCAvPjwvZGl2Pik7IC8vIEhvbmVzdGx5IEkgZG9uJ3Qgd2FudCB0byBkbyB0aGlzIGJ1dCBjb252ZW50aW9ucyBhcmUgY29udmVudGlvbnMuXG5cdH0sXG59O1xuIiwiLyoqXG4gKiBXb3JkUHJlc3MgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7XG5cdFBhbmVsQm9keSxcblx0UmFuZ2VDb250cm9sLFxuXHRQYXRoLFxuXHRTVkcsXG5cdEljb25CdXR0b24sXG5cdFRvb2xiYXIsXG59IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0B3b3JkcHJlc3MvaTE4bic7XG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQge1xuXHRjcmVhdGVCbG9jayxcbn0gZnJvbSAnQHdvcmRwcmVzcy9ibG9ja3MnO1xuaW1wb3J0IHtcblx0SW5zcGVjdG9yQ29udHJvbHMsXG5cdElubmVyQmxvY2tzLFxuXHRNZWRpYVVwbG9hZCxcblx0TWVkaWFQbGFjZWhvbGRlcixcblx0QmxvY2tDb250cm9scyxcbn0gZnJvbSAnQHdvcmRwcmVzcy9lZGl0b3InO1xuaW1wb3J0IHtcblx0c2VsZWN0XG59IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5cbmNvbnN0IEFMTE9XRURfQkxPQ0tTID0gWydjb3JlL3BhcmFncmFwaCcsICdjb3JlL2hlYWRpbmcnLCAnY29yZS9idXR0b24nLCAnY29yZS9saXN0JywgJ2NvcmUvcXVvdGUnXTtcblxuZXhwb3J0IGNvbnN0IG5hbWUgPSAnZ2Vja28vZ3JpZC1sYXlvdXQtaW1hZ2UnO1xuXG5leHBvcnQgY29uc3Qgc2V0dGluZ3MgPSB7XG5cdHRpdGxlOiBfXyggJ0ltYWdlJyApLFxuXG5cdHBhcmVudDogWydnZWNrby9ncmlkLWxheW91dCddLFxuXG5cdGljb246IDxTVkcgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48UGF0aCBkPVwiTTAsMGgyNHYyNEgwVjB6XCIgZmlsbD1cIm5vbmVcIiAvPjxQYXRoIGQ9XCJtMTkgNXYxNGgtMTR2LTE0aDE0bTAtMmgtMTRjLTEuMSAwLTIgMC45LTIgMnYxNGMwIDEuMSAwLjkgMiAyIDJoMTRjMS4xIDAgMi0wLjkgMi0ydi0xNGMwLTEuMS0wLjktMi0yLTJ6XCIgLz48UGF0aCBkPVwibTE0LjE0IDExLjg2bC0zIDMuODctMi4xNC0yLjU5LTMgMy44NmgxMmwtMy44Ni01LjE0elwiIC8+PC9TVkc+LFxuXG5cdGRlc2NyaXB0aW9uOiBfXyggJ0FuIGltYWdlIEdyaWQgQmxvY2suJyApLFxuXG5cdGNhdGVnb3J5OiAnY29tbW9uJyxcblxuXHRzdXBwb3J0czoge1xuXHRcdGNsYXNzTmFtZTogdHJ1ZSxcblx0XHRpbnNlcnRlcjogdHJ1ZSxcblx0XHRyZXVzYWJsZTogZmFsc2UsXG5cdFx0aHRtbDogZmFsc2UsXG5cdH0sXG5cblx0c3R5bGVzOiBbXG5cdFx0eyBuYW1lOiAnZGVmYXVsdCcsIGxhYmVsOiBfXyggJ0RlZmF1bHQnKSwgaXNEZWZhdWx0OiB0cnVlIH0sXG5cdFx0eyBuYW1lOiAnaG92ZXInLCBsYWJlbDogX18oICdIb3ZlcicpIH0sXG5cdFx0eyBuYW1lOiAnbm8tY2FwdGlvbicsIGxhYmVsOiBfXyggJ05vIENhcHRpb24nKSB9LFxuXHRdLFxuXG5cdGF0dHJpYnV0ZXM6IHtcblx0XHRoOiB7IHR5cGU6ICdudW1iZXInLCBkZWZhdWx0OiAxfSxcblx0XHR3OiB7IHR5cGU6ICdudW1iZXInLCBkZWZhdWx0OiAxfSxcblx0XHRtaW5IZWlnaHQ6IHsgdHlwZTogJ251bWJlcicsIGRlZmF1bHQ6IDIwMCx9LFxuXHRcdGltZ0lkOiB7IHR5cGU6ICdudW1iZXInfSxcblx0XHRpbWdVcmw6IHsgdHlwZTogJ3N0cmluZyd9LFxuXHR9LFxuXG5cdHRyYW5zZm9ybXM6IHtcblx0XHRmcm9tOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6ICdibG9jaycsXG5cdFx0XHRcdGJsb2NrczogWydnZWNrby9ncmlkLWxheW91dC1pdGVtJywgJ2dlY2tvL2dyaWQtbGF5b3V0LWJhc2ljJ10sXG5cdFx0XHRcdHRyYW5zZm9ybTogKGF0dHJpYnV0ZXMsIGlubmVyQmxvY2tzKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgc2VsZWN0ZWQgPSBzZWxlY3QoJ2NvcmUvZWRpdG9yJykuZ2V0U2VsZWN0ZWRCbG9jaygpOyAvLyBiZWNhdXNlIGlubmVyQmxvY2tzIGRvZXMgbm90IHdvcmsuXG5cdFx0XHRcdFx0Ly8gSXQgYXBwZWFycyB0aGF0IGlubmVyQmxvY2tzIHdpbGwgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS5cblx0XHRcdFx0XHRjb25zdCB7aCwgdywgYmdNZWRpYSwgYmdNZWRpYVVybCwgbWVkaWFJZCwgbWVkaWFVcmwsIG1pbkhlaWdodH0gPSBhdHRyaWJ1dGVzO1xuXHRcdFx0XHRcdHJldHVybiBjcmVhdGVCbG9jaygnZ2Vja28vZ3JpZC1sYXlvdXQtaW1hZ2UnLCB7XG5cdFx0XHRcdFx0XHRoOiBoLFxuXHRcdFx0XHRcdFx0dzogdyxcblx0XHRcdFx0XHRcdGltZ0lkOiBiZ01lZGlhIHx8IG1lZGlhSWQsXG5cdFx0XHRcdFx0XHRpbWdVcmw6IGJnTWVkaWFVcmwgfHwgbWVkaWFVcmwsXG5cdFx0XHRcdFx0XHRtaW5IZWlnaHQ6IG1pbkhlaWdodCxcblx0XHRcdFx0XHR9LCBzZWxlY3RlZC5pbm5lckJsb2Nrcyk7XG5cdFx0XHRcdH0sXG5cdFx0XHR9LFx0XG5cdFx0XVxuXHR9LFxuXG5cdGRlcHJlY2F0ZWQ6IFt7XG5cdFx0bWlncmF0ZSgpIHt9LFxuXHRcdHNhdmUoKSB7XG5cdFx0XHRyZXR1cm4gPElubmVyQmxvY2tzLkNvbnRlbnQgLyA+IDtcblx0XHR9LFxuXHR9XSxcblxuXHRlZGl0KHsgYXR0cmlidXRlcywgc2V0QXR0cmlidXRlcywgY2xhc3NOYW1lLCBpbnNlcnRCbG9ja3NBZnRlciB9KSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0aCxcblx0XHRcdHcsXG5cdFx0XHRpbWdJZCxcblx0XHRcdGltZ1VybCxcblx0XHRcdG1pbkhlaWdodCxcblx0XHR9ID0gYXR0cmlidXRlcztcblx0XHRjb25zdCBzdHlsZXMgPSB7XG5cdFx0XHRncmlkQ29sdW1uRW5kOiAnc3BhbiAnKyB3LFxuXHRcdFx0Z3JpZFJvd0VuZDogJ3NwYW4gJyArIGgsXG5cdFx0XHRtaW5IZWlnaHQ6IG1pbkhlaWdodCArICdweCcsXG5cdFx0fTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHQ8SW5zcGVjdG9yQ29udHJvbHM+XG5cdFx0XHRcdFx0PFBhbmVsQm9keSB0aXRsZT1cIkdyaWQgSXRlbVwiPlxuXHRcdFx0XHRcdFx0PFJhbmdlQ29udHJvbFxuXHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnTWluaW11bSBIZWlnaHQnICkgfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17IG1pbkhlaWdodCB9XG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsgKCBuZXh0ICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoIHtcblx0XHRcdFx0XHRcdFx0XHRcdG1pbkhlaWdodDogbmV4dCxcblx0XHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdFx0XHRtaW4gPSBcIjUwXCJcblx0XHRcdFx0XHRcdFx0bWF4ID0gXCI2MDBcIlxuXHRcdFx0XHRcdFx0XHRzdGVwID0gXCIxXCJcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8UmFuZ2VDb250cm9sXG5cdFx0XHRcdFx0XHRcdGxhYmVsPXsgX18oICdXaWR0aCcgKSB9XG5cdFx0XHRcdFx0XHRcdHZhbHVlPXsgdyB9XG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsgKCBuZXh0ICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoIHtcblx0XHRcdFx0XHRcdFx0XHRcdHc6IG5leHQsXG5cdFx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0XHR9IH1cblx0XHRcdFx0XHRcdFx0bWluPXsgMSB9XG5cdFx0XHRcdFx0XHRcdG1heD17IDEyIH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8UmFuZ2VDb250cm9sXG5cdFx0XHRcdFx0XHRcdGxhYmVsPXsgX18oICdTcGFuIFJvd3MnICkgfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17IGggfVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17ICggbmV4dCApID0+IHtcblx0XHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRoOiBuZXh0LFxuXHRcdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHRcdG1pbj17IDEgfVxuXHRcdFx0XHRcdFx0XHRtYXg9eyAxMiB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvUGFuZWxCb2R5PlxuXHRcdFx0XHQ8L0luc3BlY3RvckNvbnRyb2xzPlxuXHRcdFx0XHQ8QmxvY2tDb250cm9scz5cblx0XHRcdFx0XHQ8VG9vbGJhcj5cblx0XHRcdFx0XHRcdDxNZWRpYVVwbG9hZFxuXHRcdFx0XHRcdFx0XHRvblNlbGVjdD17KHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2codmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoe1xuXHRcdFx0XHRcdFx0XHRcdFx0aW1nSWQ6IHZhbHVlLmlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0aW1nVXJsOiB2YWx1ZS51cmwsXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdHR5cGU9e1snaW1hZ2UnXX1cblx0XHRcdFx0XHRcdFx0dmFsdWU9eyhpbWdJZCk/IGltZ0lkOiBudWxsIH1cblx0XHRcdFx0XHRcdFx0cmVuZGVyPXsoe29wZW59KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuKFxuXHRcdFx0XHRcdFx0XHRcdFx0PEljb25CdXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiY29tcG9uZW50cy1pY29uLWJ1dHRvbiBjb21wb25lbnRzLXRvb2xiYXJfX2NvbnRyb2xcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnRWRpdCBpbWFnZScgKSB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9e29wZW59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGljb249XCJlZGl0XCJcblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9Ub29sYmFyPlxuXHRcdFx0XHQ8LyBCbG9ja0NvbnRyb2xzPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT17YGdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvci1zdHlsZXNgfSBzdHlsZT17c3R5bGVzfT48L2Rpdj5cblx0XHRcdFx0PGZpZ3VyZSBjbGFzc05hbWU9e2B3cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3JfX3dyYXAgZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2UgJHthdHRyaWJ1dGVzLmNsYXNzTmFtZX1gfT5cblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHQhaW1nSWQgJiZcblx0XHRcdFx0XHRcdDxNZWRpYVBsYWNlaG9sZGVyXG5cdFx0XHRcdFx0XHRcdG9uU2VsZWN0PXsodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpbWdJZDogdmFsdWUuaWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGltZ1VybDogdmFsdWUudXJsLFxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0YWxsb3dlZFR5cGVzPXtbJ2ltYWdlJ119XG5cdFx0XHRcdFx0XHRcdGFjY2VwdD1cImltYWdlLypcIlxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aW1nVXJsICYmXG5cdFx0XHRcdFx0XHQ8aW1nIGNsYXNzTmFtZT1cImdlY2tvLWdyaWQtbGF5b3V0LWltYWdlX19pbWFnZVwiIHNyYz17aW1nVXJsfSAvPlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQ8ZmlnY2FwdGlvbiBjbGFzc05hbWU9XCJnZWNrby1ncmlkLWxheW91dC1pbWFnZV9fY2FwdGlvblwiPlxuXHRcdFx0XHRcdFx0eyB0eXBlb2YgaW5zZXJ0QmxvY2tzQWZ0ZXIgPT09ICdmdW5jdGlvbicgLy9UaGlzIGxpbmUgbWFrZXMgc3VyZSBzdHlsZXMgZG8gbm90IGJyZWFrXG5cdFx0XHRcdFx0XHRcdD8gPElubmVyQmxvY2tzIHRlbXBsYXRlTG9jaz17IGZhbHNlIH0gYWxsb3dlZEJsb2Nrcz17QUxMT1dFRF9CTE9DS1N9Lz5cblx0XHRcdFx0XHRcdFx0OiA8cD5Mb3JlbSBJcHN1bTwvcD4gLy8gVGhpcyBpcyB3aGF0IHNob3dzIGFzIHRoZSBwcmV2aWV3IGNvbnRlbnQuXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0PC9maWdjYXB0aW9uPlxuXHRcdFx0XHQ8L2ZpZ3VyZT5cblx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0KTtcblx0fSxcblxuXHRzYXZlKCkge1xuXHRcdHJldHVybig8ZGl2PjxJbm5lckJsb2Nrcy5Db250ZW50IC8+PC9kaXY+KTsgLy8gSG9uZXN0bHkgSSBkb24ndCB3YW50IHRvIGRvIHRoaXMgYnV0IGNvbnZlbnRpb25zIGFyZSBjb252ZW50aW9ucy5cblx0fSxcbn07XG4iLCJpbXBvcnQgdGlueWNvbG9yIGZyb20gJ3Rpbnljb2xvcjInO1xuXG4vKipcbiAqIFdvcmRQcmVzcyBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHtcblx0UGFuZWxCb2R5LFxuXHRSYW5nZUNvbnRyb2wsXG5cdFBhdGgsXG5cdFNWRyxcblx0UmVzaXphYmxlQm94XG59IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0B3b3JkcHJlc3MvaTE4bic7XG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQge1xuXHRjcmVhdGVCbG9jayxcbn0gZnJvbSAnQHdvcmRwcmVzcy9ibG9ja3MnO1xuaW1wb3J0IHtcblx0SW5zcGVjdG9yQ29udHJvbHMsXG5cdElubmVyQmxvY2tzLFxuXHRNZWRpYVVwbG9hZCxcblx0TWVkaWFQbGFjZWhvbGRlcixcblx0Q29sb3JQYWxldHRlLFxuXHRnZXRDb2xvck9iamVjdEJ5Q29sb3JWYWx1ZSxcbn0gZnJvbSAnQHdvcmRwcmVzcy9lZGl0b3InO1xuaW1wb3J0IHtcblx0c2VsZWN0XG59IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ2dlY2tvL2dyaWQtbGF5b3V0LWl0ZW0nO1xuXG5leHBvcnQgY29uc3Qgc2V0dGluZ3MgPSB7XG5cdHRpdGxlOiBfXyggJ0V4cGVyaW1lbnRhbCAoRG8gTm90IFVzZSknICksXG5cblx0cGFyZW50OiBbJ2dlY2tvL2dyaWQtbGF5b3V0J10sXG5cblx0aWNvbjogPFNWRyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxQYXRoIGZpbGw9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMFYwelwiIC8+PFBhdGggZD1cIk0xMS45OSAxOC41NGwtNy4zNy01LjczTDMgMTQuMDdsOSA3IDktNy0xLjYzLTEuMjd6TTEyIDE2bDcuMzYtNS43M0wyMSA5bC05LTctOSA3IDEuNjMgMS4yN0wxMiAxNnptMC0xMS40N0wxNy43NCA5IDEyIDEzLjQ3IDYuMjYgOSAxMiA0LjUzelwiIC8+PC9TVkc+LFxuXG5cdGRlc2NyaXB0aW9uOiBfXyggJ0Egc2luZ2xlIGdyaWQgaXRlbSB3aXRoaW4gYSBncmlkIGJsb2NrLicgKSxcblxuXHRjYXRlZ29yeTogJ2NvbW1vbicsXG5cblx0c3VwcG9ydHM6IHtcblx0XHRjbGFzc05hbWU6IHRydWUsXG5cdFx0aW5zZXJ0ZXI6IHRydWUsXG5cdFx0cmV1c2FibGU6IGZhbHNlLFxuXHRcdGh0bWw6IGZhbHNlLFxuXHR9LFxuXG5cdHN0eWxlczogW1xuXHRcdHsgbmFtZTogJ2RlZmF1bHQnLCBsYWJlbDogX18oICdEZWZhdWx0JyksIGlzRGVmYXVsdDogdHJ1ZSB9LFxuXHRcdHsgbmFtZTogJ2hvdmVyJywgbGFiZWw6IF9fKCAnSG92ZXInKSB9LFxuXHRdLFxuXG5cdGF0dHJpYnV0ZXM6IHtcblx0XHR0eXBlOnsgdHlwZTogJ3N0cmluZycsZGVmYXVsdDogdW5kZWZpbmVkLCB9LCAvL3NvbGlkLCBpbWFnZSwgaW1hZ2UtY29udGVudFxuXHRcdC8vIHRoZW1lOnsgdHlwZTogJ3N0cmluZycsZGVmYXVsdDogdW5kZWZpbmVkLCB9LCAvL2xpZ2h0LCBkYXJrXG5cdFx0Ly8gYm9yZGVyUmFkaXVzOiB7IHR5cGU6ICdudW1iZXInfSxcblx0XHQvLyBib3JkZXI6IHsgdHlwZTogJ29iamVjdCd9LFxuXHRcdC8vIGJveFNoYWRvdzogeyB0eXBlOiAnb2JqZWN0J30sXG5cdFx0Ly8gcGFkZGluZzogeyB0eXBlOiAnc3RyaW5nJ30sIC8vIHQgYiBsIHIgdWkgJzVweCAxMHB4JyAnNXB4IDEwcHggNXB4J1xuXHRcdC8vIG1hcmdpbjogeyB0eXBlOiAnb2JqZWN0J30sIC8vIHQgYiBsIHIgdWlcblx0XHQvLyBhbGlnbkNvbnRlbnQ6IHsgdHlwZTogJ3N0cmluZyd9LCAvLyBub3JtYWwsIHN0YXJ0LCBlbmQsIGNlbnRlclxuXHRcdC8vIGp1c3RpZnlDb250ZW50OiB7IHR5cGU6ICdzdHJpbmcnfSwgLy8gbm9ybWFsLCBzdGFydCwgZW5kLCBjZW50ZXJcblx0XHQvLyBiYWNrZ3JvdW5kSW1hZ2U6IHsgdHlwZTogJ3N0cmluZyd9LCAvLyBwcm9jZXNzIGZvciBjcmVhdGluZyBiZyBpbWFnZXNcblx0XHQvLyBiYWNrZ3JvdW5kUmVwZWF0OiB7IHR5cGU6ICdzdHJpbmcnfSwgLy8gbm8tcmVwZWF0LCByZXBlYXQsIHJlcGVhdC14LCByZXBlYXQteVxuXHRcdC8vIGJhY2tncm91bmRTaXplOiB7IHR5cGU6ICdzdHJpbmcnfSwgLy8gY292ZXIsY29udGFpbixhdXRvXG5cdFx0Ly8gYmFja2dyb3VuZENvbG9yOiB7IHR5cGU6ICdzdHJpbmcnfSxcblx0XHRoOiB7IHR5cGU6ICdudW1iZXInLCBkZWZhdWx0OiAxLH0sXG5cdFx0dzogeyB0eXBlOiAnbnVtYmVyJ30sXG5cdFx0bWluSGVpZ2h0OiB7IHR5cGU6ICdudW1iZXInLCBkZWZhdWx0OiAyMDAsfSxcblx0XHRvcGFjaXR5OiB7IHR5cGU6ICdudW1iZXInLCBkZWZhdWx0OiAxfSxcblx0XHRiZ01lZGlhOiB7IHR5cGU6ICdudW1iZXInfSxcblx0XHRiZ01lZGlhVXJsOiB7IHR5cGU6ICdzdHJpbmcnfSxcblx0XHRiZ0NvbG9yOiB7IHR5cGU6ICdzdHJpbmcnfSxcblx0XHRiZ0NvbG9yU2x1ZzogeyB0eXBlOiAnc3RyaW5nJ30sXG5cdFx0YmdDb2xvckJyaWdodG5lc3M6IHt0eXBlOiAnbnVtYmVyJ30sLy9saWdodCBvciBkYXJrXG5cdH0sXG5cblx0dHJhbnNmb3Jtczoge1xuXHRcdGZyb206IFtcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogJ2Jsb2NrJyxcblx0XHRcdFx0YmxvY2tzOiBbJ2dlY2tvL2dyaWQtbGF5b3V0LWltYWdlJywgJ2dlY2tvL2dyaWQtbGF5b3V0LWJhc2ljJ10sXG5cdFx0XHRcdHRyYW5zZm9ybTogKGF0dHJpYnV0ZXMsIGlubmVyQmxvY2tzKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgc2VsZWN0ZWQgPSBzZWxlY3QoJ2NvcmUvZWRpdG9yJykuZ2V0U2VsZWN0ZWRCbG9jaygpOyAvLyBiZWNhdXNlIGlubmVyQmxvY2tzIGRvZXMgbm90IHdvcmsuXG5cdFx0XHRcdFx0Ly8gSXQgYXBwZWFycyB0aGF0IGlubmVyQmxvY2tzIHdpbGwgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS5cblx0XHRcdFx0XHRjb25zdCB7aCwgdywgaW1nSWQsIGltZ1VybCwgbWVkaWFJZCwgbWVkaWFVcmwsIG1pbkhlaWdodH0gPSBhdHRyaWJ1dGVzO1xuXHRcdFx0XHRcdHJldHVybiBjcmVhdGVCbG9jaygnZ2Vja28vZ3JpZC1sYXlvdXQtaXRlbScsIHtcblx0XHRcdFx0XHRcdGg6IGgsXG5cdFx0XHRcdFx0XHR3OiB3LFxuXHRcdFx0XHRcdFx0YmdNZWRpYTogaW1nSWQgfHwgbWVkaWFJZCxcblx0XHRcdFx0XHRcdGJnTWVkaWFVcmw6IGltZ1VybCB8fCBtZWRpYVVybCxcblx0XHRcdFx0XHRcdG1pbkhlaWdodDogbWluSGVpZ2h0LFxuXHRcdFx0XHRcdH0sIHNlbGVjdGVkLmlubmVyQmxvY2tzKTtcblx0XHRcdFx0fSxcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cblx0ZGVwcmVjYXRlZDogW1xuXHRcdHtcblx0XHRcdG1pZ3JhdGUoKSB7fSxcblx0XHRcdHNhdmUoKSB7XG5cdFx0XHRcdHJldHVybiA8SW5uZXJCbG9ja3MuQ29udGVudCAvPjtcblx0XHRcdH0sXG5cdFx0fVxuXHRdLFxuXG5cdGVkaXQoeyBhdHRyaWJ1dGVzLCBzZXRBdHRyaWJ1dGVzLCBjbGFzc05hbWUsIGluc2VydEJsb2Nrc0FmdGVyIH0pIHtcblx0XHRjb25zdCB7XG5cdFx0XHRvcGFjaXR5LFxuXHRcdFx0aCxcblx0XHRcdHcsXG5cdFx0XHR0eXBlLFxuXHRcdFx0cGFkZGluZyxcblx0XHRcdGJnTWVkaWEsXG5cdFx0XHRiZ01lZGlhVXJsLFxuXHRcdFx0YmdDb2xvcixcblx0XHRcdGJnQ29sb3JCcmlnaHRuZXNzLFxuXHRcdFx0YmdDb2xvclNsdWcsXG5cdFx0XHRtaW5IZWlnaHQsXG5cdFx0fSA9IGF0dHJpYnV0ZXM7XG5cdFx0Y29uc3Qgc3R5bGVzID0ge1xuXHRcdFx0Jy0tYmFja2dyb3VuZCc6IGJnQ29sb3IsXG5cdFx0XHQnLS1vcGFjaXR5Jzogb3BhY2l0eSxcblx0XHRcdGdyaWRDb2x1bW5FbmQ6ICdzcGFuICcrIHcsXG5cdFx0XHRncmlkUm93RW5kOiAnc3BhbiAnICsgaCxcblx0XHRcdGJhY2tncm91bmRDb2xvcjogYmdDb2xvcixcblx0XHRcdGJhY2tncm91bmRJbWFnZTogJ3VybCgnICsgYmdNZWRpYVVybCArICcpJyxcblx0XHRcdG1pbkhlaWdodDogbWluSGVpZ2h0ICsgJ3B4Jyxcblx0XHR9O1xuXHRcdGxldCBsaWdodE9yRGFyayA9ICdsaWdodCc7XG5cdFx0aWYgKGJnQ29sb3JCcmlnaHRuZXNzIDwgMTMwKSBsaWdodE9yRGFyayA9ICdkYXJrJztcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHQ8SW5zcGVjdG9yQ29udHJvbHM+XG5cdFx0XHRcdFx0PFBhbmVsQm9keSAgdGl0bGU9XCJTZXR0aW5nc1wiPlxuXHRcdFx0XHRcdFx0PFJhbmdlQ29udHJvbFxuXHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnV2lkdGgnICkgfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17IHcgfVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17ICggbmV4dCApID0+IHtcblx0XHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKCB7XG5cdFx0XHRcdFx0XHRcdFx0XHR3OiBuZXh0LFxuXHRcdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHRcdG1pbj17IDEgfVxuXHRcdFx0XHRcdFx0XHRtYXg9eyAxMiB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PFJhbmdlQ29udHJvbFxuXHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnU3BhbiBSb3dzJyApIH1cblx0XHRcdFx0XHRcdFx0dmFsdWU9eyBoIH1cblx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyAoIG5leHQgKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0QXR0cmlidXRlcygge1xuXHRcdFx0XHRcdFx0XHRcdFx0aDogbmV4dCxcblx0XHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdFx0XHRtaW49eyAxIH1cblx0XHRcdFx0XHRcdFx0bWF4PXsgMTIgfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L1BhbmVsQm9keT5cblx0XHRcdFx0XHQ8UGFuZWxCb2R5IHRpdGxlPVwiU3R5bGVcIj5cblx0XHRcdFx0XHRcdDxSYW5nZUNvbnRyb2xcblx0XHRcdFx0XHRcdFx0bGFiZWw9eyBfXyggJ01pbmltdW0gSGVpZ2h0JyApIH1cblx0XHRcdFx0XHRcdFx0dmFsdWU9eyBtaW5IZWlnaHQgfVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17ICggbmV4dCApID0+IHtcblx0XHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRtaW5IZWlnaHQ6IG5leHQsXG5cdFx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0XHR9IH1cblx0XHRcdFx0XHRcdFx0bWluID0gXCI1MFwiXG5cdFx0XHRcdFx0XHRcdG1heCA9IFwiNjAwXCJcblx0XHRcdFx0XHRcdFx0c3RlcCA9IFwiMVwiXG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0eyB0eXBlICE9PSBcInNvbGlkXCIgJiZcblx0XHRcdFx0XHRcdFx0PE1lZGlhVXBsb2FkXG5cdFx0XHRcdFx0XHRcdFx0b25TZWxlY3Q9eyh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2codmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QXR0cmlidXRlcyh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJnTWVkaWE6IHZhbHVlLmlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRiZ01lZGlhVXJsOiB2YWx1ZS51cmwsXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdHR5cGU9e1snaW1hZ2UnLCAndmlkZW8nXX1cblx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17KGJnTWVkaWEpPyBiZ01lZGlhOiBudWxsIH1cblx0XHRcdFx0XHRcdFx0XHRyZW5kZXI9eyh7b3Blbn0pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybihcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7YmdNZWRpYVVybCAmJiA8aW1nIHNyYz17YmdNZWRpYVVybH0gb25DbGljaz17b3Blbn0gd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiYXV0b1wiIHN0eWxlPXt7Y3Vyc29yOiBcInBvaW50ZXJcIn19Lz59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0eyFiZ01lZGlhVXJsICYmIDxkaXYgY2xhc3NOYW1lPXsnYnV0dG9uIGJ1dHRvbi1sYXJnZSd9IG9uQ2xpY2s9e29wZW59PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Q2hvb3NlIEJhY2tncm91bmRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0PGhyIC8+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PENvbG9yUGFsZXR0ZVxuXHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw9J0JhY2tncm91bmQgQ29sb3InXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17KGJnQ29sb3IpID8gYmdDb2xvci5jb2xvciA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBzZXR0aW5ncyA9IHNlbGVjdCgnY29yZS9lZGl0b3InKS5nZXRFZGl0b3JTZXR0aW5ncygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGNvbG9yU2x1ZyA9ICh2YWx1ZSkgPyBnZXRDb2xvck9iamVjdEJ5Q29sb3JWYWx1ZShzZXR0aW5ncy5jb2xvcnMsIHZhbHVlKS5zbHVnIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoe2JnQ29sb3JTbHVnOiBjb2xvclNsdWd9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBicmlnaHRuZXNzID0gKHZhbHVlKSA/IHRpbnljb2xvcih2YWx1ZSkuZ2V0QnJpZ2h0bmVzcygpOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2V0QXR0cmlidXRlcyh7YmdDb2xvckJyaWdodG5lc3M6IGJyaWdodG5lc3N9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKHtiZ0NvbG9yOiB2YWx1ZX0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQ8aHIgLz5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9QYW5lbEJvZHk+XG5cdFx0XHRcdDwvSW5zcGVjdG9yQ29udHJvbHM+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPXtgZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yLXN0eWxlc2B9IHN0eWxlPXtzdHlsZXN9PjwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT17YHdwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvcl9fd3JhcCR7dHlwZX0gJHthdHRyaWJ1dGVzLmNsYXNzTmFtZX0gaGFzLSR7YmdDb2xvclNsdWd9LWJhY2tncm91bmQtY29sb3IgaXMtJHtsaWdodE9yRGFya30tYmFja2dyb3VuZGB9PlxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdCh0eXBlID09PSAnaW1hZ2UnIHx8IHR5cGUgPT09ICdpbWFnZS1jb250ZW50JykgJiZcblx0XHRcdFx0XHRcdCFiZ01lZGlhICYmXG5cdFx0XHRcdFx0XHQ8TWVkaWFQbGFjZWhvbGRlclxuXHRcdFx0XHRcdFx0XHRvblNlbGVjdD17KHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YmdNZWRpYTogdmFsdWUuaWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJnTWVkaWFVcmw6IHZhbHVlLnVybCxcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdGFsbG93ZWRUeXBlcz17WydpbWFnZSddfVxuXHRcdFx0XHRcdFx0XHRhY2NlcHQ9XCJpbWFnZS8qXCJcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHsgXG5cdFx0XHRcdFx0XHQodHlwZW9mIGluc2VydEJsb2Nrc0FmdGVyID09PSAnZnVuY3Rpb24nKSAmJiAvL1RoaXMgbGluZSBtYWtlcyBzdXJlIHN0eWxlcyBkbyBub3QgYnJlYWtcblx0XHRcdFx0XHRcdDxJbm5lckJsb2NrcyB0ZW1wbGF0ZUxvY2s9eyBmYWxzZSB9IC8+XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpO1xuXHR9LFxuXG5cdHNhdmUoKSB7XG5cdFx0cmV0dXJuKDxkaXY+PElubmVyQmxvY2tzLkNvbnRlbnQgLz48L2Rpdj4pOyAvLyBIb25lc3RseSBJIGRvbid0IHdhbnQgdG8gZG8gdGhpcyBidXQgY29udmVudGlvbnMgYXJlIGNvbnZlbnRpb25zLlxuXHR9LFxufTtcbiIsIi8qKlxuICogV29yZFByZXNzIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBfXyB9IGZyb20gJ0B3b3JkcHJlc3MvaTE4bic7XG5pbXBvcnQgeyBQYW5lbEJvZHksIFJhbmdlQ29udHJvbCwgRywgU1ZHLCBQYXRoIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb25lbnRzJztcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7XG5cdEluc3BlY3RvckNvbnRyb2xzLFxuXHRJbm5lckJsb2Nrcyxcbn0gZnJvbSAnQHdvcmRwcmVzcy9lZGl0b3InO1xuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcbmltcG9ydCBUZW1wbGF0ZVBpY2tlciBmcm9tICcuL3RlbXBsYXRlLXNlbGVjdCc7XG5cbi8qKlxuICogQWxsb3dlZCBibG9ja3MgY29uc3RhbnQgaXMgcGFzc2VkIHRvIElubmVyQmxvY2tzIHByZWNpc2VseSBhcyBzcGVjaWZpZWQgaGVyZS5cbiAqIFRoZSBjb250ZW50cyBvZiB0aGUgYXJyYXkgc2hvdWxkIG5ldmVyIGNoYW5nZS5cbiAqIFRoZSBhcnJheSBzaG91bGQgY29udGFpbiB0aGUgbmFtZSBvZiBlYWNoIGJsb2NrIHRoYXQgaXMgYWxsb3dlZC5cbiAqIEluIGNvbHVtbnMgYmxvY2ssIHRoZSBvbmx5IGJsb2NrIHdlIGFsbG93IGlzICdkbXAvZ3JpZC1pdGVtJy5cbiAqXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtzdHJpbmdbXX1cbiovXG5jb25zdCBBTExPV0VEX0JMT0NLUyA9IFsnZ2Vja28vZ3JpZC1sYXlvdXQtaXRlbScsICdnZWNrby9ncmlkLWxheW91dC1pbWFnZScsICdnZWNrby9ncmlkLWxheW91dC1iYXNpYyddO1xuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdnZWNrby9ncmlkLWxheW91dCc7XG5cbmV4cG9ydCBjb25zdCBzZXR0aW5ncyA9IHtcblx0dGl0bGU6IF9fKCAnR3JpZCcgKSxcblxuXHRpY29uOiA8U1ZHIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PFBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwVjB6XCIgLz48Rz48UGF0aCBkPVwiTTQsMTMgTDgsMTMgTDgsMTAgTDQsMTAgTDQsMTMgWiBNNCwxNSBMNCwxOCBMOCwxOCBMOCwxNSBMNCwxNSBaIE0xMCwxMyBMMTQsMTMgTDE0LDEwIEwxMCwxMCBMMTAsMTMgWiBNMTAsMTUgTDEwLDE4IEwxNCwxOCBMMTQsMTUgTDEwLDE1IFogTTIwLDEzIEwyMCwxMCBMMTYsMTAgTDE2LDEzIEwyMCwxMyBaIE0yMCwxNSBMMTYsMTUgTDE2LDE4IEwyMCwxOCBMMjAsMTUgWiBNNCw4IEw4LDggTDgsNSBMNCw1IEw0LDggWiBNMTAsOCBMMTQsOCBMMTQsNSBMMTAsNSBMMTAsOCBaIE0yMCw4IEwyMCw1IEwxNiw1IEwxNiw4IEwyMCw4IFogTTQsMyBMMjAsMyBDMjEuMTA0NTY5NSwzIDIyLDMuOTUxMzk0OTEgMjIsNS4xMjUgTDIyLDE3Ljg3NSBDMjIsMTkuMDQ4NjA1MSAyMS4xMDQ1Njk1LDIwIDIwLDIwIEw0LDIwIEMyLjg5NTQzMDUsMjAgMiwxOS4wNDg2MDUxIDIsMTcuODc1IEwyLDUuMTI1IEMyLDMuOTUxMzk0OTEgMi44OTU0MzA1LDMgNCwzIFpcIiAvPjwvRz48L1NWRz4sXG5cblx0Y2F0ZWdvcnk6ICdsYXlvdXQnLFxuXG5cdGRlc2NyaXB0aW9uOiBfXyggJ1VzZSBDU1MgR3JpZCB0byBidWlsZCBsYXlvdXRzIGFuZCwgdGhlbiBhZGQgd2hhdGV2ZXIgY29udGVudCBibG9ja3MgeW914oCZZCBsaWtlLicgKSxcblxuXHRzdXBwb3J0czoge1xuXHRcdGFsaWduOiBbICd3aWRlJywgJ2Z1bGwnIF0sXG5cdFx0aHRtbDogZmFsc2UsXG5cdH0sXG5cblx0ZGVwcmVjYXRlZDogW1xuXHRcdHtcblx0XHRcdG1pZ3JhdGUoKSB7fSxcblx0XHRcdHNhdmUoKSB7XG5cdFx0XHRcdHJldHVybiA8SW5uZXJCbG9ja3MuQ29udGVudCAvPjtcblx0XHRcdH0sXG5cdFx0fVxuXHRdLFxuXG5cdHN0eWxlczogW1xuXHRcdHsgbmFtZTogJ2RlZmF1bHQnLCBsYWJlbDogX18oICdEZWZhdWx0JyksIGlzRGVmYXVsdDogdHJ1ZSB9LFxuXHRcdHsgbmFtZTogJ25vLWdhcCcsIGxhYmVsOiBfXyggJ05vIEdhcCcpIH0sXG5cdF0sXG5cblx0ZWRpdCggeyBhdHRyaWJ1dGVzLCBzZXRBdHRyaWJ1dGVzLCBpbnNlcnRCbG9ja3NBZnRlciwgY2xpZW50SWQgfSApIHtcblx0XHRjb25zdCBibG9jayA9IHNlbGVjdCgnY29yZS9lZGl0b3InKS5nZXRCbG9ja3NCeUNsaWVudElkKGNsaWVudElkKVswXTtcblx0XHRjb25zdCBoYXNJbm5lckJsb2NrcyA9IChibG9jayAmJiBibG9jay5pbm5lckJsb2NrcykgPyBibG9jay5pbm5lckJsb2Nrcy5sZW5ndGggPiAwIDogZmFsc2U7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHQ8SW5zcGVjdG9yQ29udHJvbHM+XG5cdFx0XHRcdFx0PFBhbmVsQm9keT5cblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdDwvUGFuZWxCb2R5PlxuXHRcdFx0XHQ8L0luc3BlY3RvckNvbnRyb2xzPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvclwiPlxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHR5cGVvZiBpbnNlcnRCbG9ja3NBZnRlciA9PT0gJ2Z1bmN0aW9uJyA/XG5cdFx0XHRcdFx0XHQ8VGVtcGxhdGVQaWNrZXIgaGFzSW5ubmVyQmxvY2tzPXtoYXNJbm5lckJsb2Nrc30gYWxsb3dlZEJsb2Nrcz17IEFMTE9XRURfQkxPQ0tTIH0+PC9UZW1wbGF0ZVBpY2tlcj4gOlxuXHRcdFx0XHRcdFx0PHA+e19fKCdQcmV2aWV3IE5vdCBBdmFpbGFibGUnKX08L3A+XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0KTtcblx0fSxcblxuXHRzYXZlKCkge1xuXHRcdHJldHVybig8ZGl2PjxJbm5lckJsb2Nrcy5Db250ZW50IC8+PC9kaXY+KTsgLy8gSG9uZXN0bHkgSSBkb24ndCB3YW50IHRvIGRvIHRoaXMgYnV0IGNvbnZlbnRpb25zIGFyZSBjb252ZW50aW9ucy5cblx0fSxcbn07XG4iLCIvKipcbiAqIFdvcmRQcmVzcyBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHtyZWdpc3RlckJsb2NrVHlwZX0gZnJvbSAnQHdvcmRwcmVzcy9ibG9ja3MnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgKiBhcyBncmlkIGZyb20gJy4vZ3JpZC1sYXlvdXQnO1xuaW1wb3J0ICogYXMgZ3JpZEl0ZW0gZnJvbSAnLi9ncmlkLWxheW91dC1pdGVtJztcbmltcG9ydCAqIGFzIGdyaWRJdGVtSW1hZ2UgZnJvbSAnLi9ncmlkLWxheW91dC1pbWFnZSc7XG5pbXBvcnQgKiBhcyBncmlkSXRlbUJhc2ljIGZyb20gJy4vZ3JpZC1sYXlvdXQtYmFzaWMnO1xuXG5yZWdpc3RlckJsb2NrVHlwZShncmlkLm5hbWUsIGdyaWQuc2V0dGluZ3MpO1xucmVnaXN0ZXJCbG9ja1R5cGUoZ3JpZEl0ZW1CYXNpYy5uYW1lLCBncmlkSXRlbUJhc2ljLnNldHRpbmdzKTtcbnJlZ2lzdGVyQmxvY2tUeXBlKGdyaWRJdGVtSW1hZ2UubmFtZSwgZ3JpZEl0ZW1JbWFnZS5zZXR0aW5ncyk7XG5yZWdpc3RlckJsb2NrVHlwZShncmlkSXRlbS5uYW1lLCBncmlkSXRlbS5zZXR0aW5ncyk7XG5cbi8qKlxuICogVGhpcyBtYWtlIHN1cmUgdGhlIGdyaWQgd29ya3MgaW4gdGhlIGVkaXRvci5cbiAqL1xuLy8gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24gKCkge1xuLy8gXHRmdW5jdGlvbiB1cGRhdGVDb250YWluZXIoKSB7XG4vLyBcdFx0Y29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmdlY2tvLWdyaWQtc2xpZGVyJyk7XG4vLyBcdFx0aWYgKGNvbnRhaW5lcikge1xuLy8gXHRcdFx0ZnVuY3Rpb24gbGlzdGVuRm9yQXBwZW5kZWROb2RlcygpIHtcbi8vIFx0XHRcdFx0Ly8gbGlzdGVuIGZvciBjaGlsZCBibG9ja3MgYmVpbmcgYWRkZWQgdG8gbGF5b3V0XG4vLyBcdFx0XHRcdGNvbnN0IGxheW91dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3ItYmxvY2stbGlzdF9fbGF5b3V0Jyk7XG4vLyBcdFx0XHRcdGNvbnN0IG9ic2VydmVyQ29uZmlnID0ge1xuLy8gXHRcdFx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcbi8vIFx0XHRcdFx0XHRzdWJ0cmVlOiB0cnVlXG4vLyBcdFx0XHRcdH07XG4vLyBcdFx0XHRcdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9uTGlzdCkgPT4ge1xuLy8gXHRcdFx0XHRcdGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25MaXN0KSB7XG4vLyBcdFx0XHRcdFx0XHRpZiAobXV0YXRpb24udHlwZSA9PT0gJ2NoaWxkTGlzdCcgJiYgbXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGgpIHtcbi8vIFx0XHRcdFx0XHRcdFx0Y29uc3QgY2hpbGRCbG9ja3MgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtdHlwZT1cImdlY2tvL2dyaWQtc2xpZGVyLWdyaWQtc2xpZGVcIl0nKTtcbi8vIFx0XHRcdFx0XHRcdFx0bGlzdGVuRm9yQmxvY2tDaGFuZ2VzKGNoaWxkQmxvY2tzKTtcbi8vIFx0XHRcdFx0XHRcdH1cbi8vIFx0XHRcdFx0XHR9XG4vLyBcdFx0XHRcdH0pO1xuLy8gXHRcdFx0XHRvYnNlcnZlci5vYnNlcnZlKGxheW91dCwgb2JzZXJ2ZXJDb25maWcpO1xuLy8gXHRcdFx0fVxuXG4vLyBcdFx0XHRmdW5jdGlvbiBsaXN0ZW5Gb3JCbG9ja0NoYW5nZXMoYmxvY2tzKSB7XG4vLyBcdFx0XHRcdGZvciAoY29uc3QgYmxvY2sgb2YgYmxvY2tzKSB7XG4vLyBcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2Jsb2NrJywgYmxvY2spXG4vLyBcdFx0XHRcdFx0Y29uc3Qgb2JzZXJ2ZXJDb25maWcgPSB7XG4vLyBcdFx0XHRcdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuLy8gXHRcdFx0XHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbJ3N0eWxlJywgJ2RhdGEtYmcnXVxuLy8gXHRcdFx0XHRcdH07XG4vLyBcdFx0XHRcdFx0Ly8gRmluZCB0aGUgc2xpZGUgdGhhdCBoYXMgdGhlIGF0dHJpYnV0ZXNcbi8vIFx0XHRcdFx0XHRjb25zdCBzbGlkZSA9IGJsb2NrLnF1ZXJ5U2VsZWN0b3IoJy5nZWNrby1ncmlkLXNsaWRlcl9fc2xpZGUnKTtcblxuLy8gXHRcdFx0XHRcdC8vIEluaXRpYWxpemUgYmxvY2sgc3R5bGVzXG4vLyBcdFx0XHRcdFx0Y29uc3Qgc3R5bGVzID0gc2xpZGUuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuLy8gXHRcdFx0XHRcdGJsb2NrLnN0eWxlID0gc3R5bGVzO1xuXG4vLyBcdFx0XHRcdFx0Ly8gTGlzdGVuIGZvciBzbGlkZSBzdHlsZSBjaGFuZ2VzXG4vLyBcdFx0XHRcdFx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25MaXN0KSA9PiB7XG4vLyBcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9uTGlzdCkge1xuLy8gXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZygnbXV0YXRpb24gMiBvY2N1cmVkJyk7XG4vLyBcdFx0XHRcdFx0XHRcdGlmIChtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09PSAnc3R5bGUnKSB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc3R5bGVzID0gbXV0YXRpb24udGFyZ2V0LmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcbi8vIFx0XHRcdFx0XHRcdFx0XHRibG9jay5zdHlsZSA9IHN0eWxlcztcbi8vIFx0XHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdH0pO1xuLy8gXHRcdFx0XHRcdG9ic2VydmVyLm9ic2VydmUoc2xpZGUsIG9ic2VydmVyQ29uZmlnKTtcbi8vIFx0XHRcdFx0fVxuLy8gXHRcdFx0fVxuLy8gXHRcdFx0bGlzdGVuRm9yQXBwZW5kZWROb2RlcygpO1xuLy8gXHRcdFx0bGV0IGNoaWxkQmxvY2tzID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXR5cGU9XCJnZWNrby9ncmlkLXNsaWRlci1ncmlkLXNsaWRlXCJdJyk7XG4vLyBcdFx0XHRsaXN0ZW5Gb3JCbG9ja0NoYW5nZXMoY2hpbGRCbG9ja3MpO1xuLy8gXHRcdH1cbi8vIFx0fVxuXG4vLyBcdHVwZGF0ZUNvbnRhaW5lcigpO1xuXG4vLyBcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Ob2RlSW5zZXJ0ZWRcIiwgdXBkYXRlQ29udGFpbmVyKVxuLy8gfSk7XG5cbmpRdWVyeShmdW5jdGlvbiAoJCkge1xuXG5cdGZ1bmN0aW9uIGxpc3RlbkZvclN0eWxlQ2hhbmdlc0dyaWRJdGVtKCkge1xuXHRcdCQoJy5nZWNrby1ncmlkLWxheW91dC1lZGl0b3Itc3R5bGVzJykuZWFjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcblx0XHRcdFx0bXV0YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG11dGF0aW9uKSB7XG5cdFx0XHRcdFx0Ly8gT24gY2hhbmdlIHVwZGF0ZSB0aGUgc3R5bGVzXG5cdFx0XHRcdFx0JCgnW2RhdGEtdHlwZT1cImdlY2tvL2dyaWQtbGF5b3V0LWJhc2ljXCJdJykuZWFjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzdHlsZXMgPSAkKHRoaXMpLmZpbmQoXCIuZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yLXN0eWxlc1wiKS5hdHRyKFwic3R5bGVcIik7XG5cdFx0XHRcdFx0XHQkKHRoaXMpLmF0dHIoXCJzdHlsZVwiLCBzdHlsZXMpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdCQoJ1tkYXRhLXR5cGU9XCJnZWNrby9ncmlkLWxheW91dC1pbWFnZVwiXScpLmVhY2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3R5bGVzID0gJCh0aGlzKS5maW5kKFwiLmdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvci1zdHlsZXNcIikuYXR0cihcInN0eWxlXCIpO1xuXHRcdFx0XHRcdFx0JCh0aGlzKS5hdHRyKFwic3R5bGVcIiwgc3R5bGVzKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHQkKCdbZGF0YS10eXBlPVwiZ2Vja28vZ3JpZC1sYXlvdXQtaXRlbVwiXScpLmVhY2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3R5bGVzID0gJCh0aGlzKS5maW5kKFwiLmdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvci1zdHlsZXNcIikuYXR0cihcInN0eWxlXCIpO1xuXHRcdFx0XHRcdFx0JCh0aGlzKS5hdHRyKFwic3R5bGVcIiwgc3R5bGVzKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHRcdG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHRcdG9ic2VydmVyLm9ic2VydmUodGhpcywge1xuXHRcdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFsnc3R5bGUnXVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRmdW5jdGlvbiBsaXN0ZW5Gb3JTdHlsZUNoYW5nZXNHcmlkKCkge1xuXHRcdCQoJy53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3InKS5lYWNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuXHRcdFx0XHRtdXRhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAobXV0YXRpb24pIHtcblx0XHRcdFx0XHQvLyBPbiBjaGFuZ2UgdXBkYXRlIHRoZSBzdHlsZXNcblx0XHRcdFx0XHQkKCcud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yJykuZWFjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzdHlsZXMgPSAkKHRoaXMpLmF0dHIoXCJkYXRhLXBhc3N0aHJ1XCIpO1xuXHRcdFx0XHRcdFx0Y29uc3QgZ3JpZCA9ICQodGhpcykuYXR0cihcImRhdGEtZ3JpZFwiKTtcblx0XHRcdFx0XHRcdCQodGhpcykuZmluZChcIi5lZGl0b3ItYmxvY2stbGlzdF9fbGF5b3V0XCIpLmF0dHIoXCJzdHlsZVwiLCBzdHlsZXMpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXHRcdFx0b2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCB7XG5cdFx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogWydkYXRhLXBhc3N0aHJ1JywgJ3N0eWxlJ10sXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdGZ1bmN0aW9uIHVwZGF0ZVN0eWxlc0dyaWRJdGVtKCkge1xuXHRcdCQoJ1tkYXRhLXR5cGU9XCJnZWNrby9ncmlkLWxheW91dC1pbWFnZVwiXScpLmVhY2goZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc3Qgc3R5bGVzID0gJCh0aGlzKS5maW5kKFwiLmdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvci1zdHlsZXNcIikuYXR0cihcInN0eWxlXCIpO1xuXHRcdFx0JCh0aGlzKS5hdHRyKFwic3R5bGVcIiwgc3R5bGVzKTtcblx0XHR9KTtcblx0XHQkKCdbZGF0YS10eXBlPVwiZ2Vja28vZ3JpZC1sYXlvdXQtYmFzaWNcIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnN0IHN0eWxlcyA9ICQodGhpcykuZmluZChcIi5nZWNrby1ncmlkLWxheW91dC1lZGl0b3Itc3R5bGVzXCIpLmF0dHIoXCJzdHlsZVwiKTtcblx0XHRcdCQodGhpcykuYXR0cihcInN0eWxlXCIsIHN0eWxlcyk7XG5cdFx0fSk7XG5cdFx0JCgnW2RhdGEtdHlwZT1cImdlY2tvL2dyaWQtbGF5b3V0LWl0ZW1cIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnN0IHN0eWxlcyA9ICQodGhpcykuZmluZChcIi5nZWNrby1ncmlkLWxheW91dC1lZGl0b3Itc3R5bGVzXCIpLmF0dHIoXCJzdHlsZVwiKTtcblx0XHRcdCQodGhpcykuYXR0cihcInN0eWxlXCIsIHN0eWxlcyk7XG5cdFx0fSk7XG5cdH1cblxuXHRmdW5jdGlvbiB1cGRhdGVTdHlsZXNHcmlkKCkge1xuXHRcdCQoJy53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3InKS5lYWNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnN0IHN0eWxlcyA9ICQodGhpcykuYXR0cihcImRhdGEtcGFzc3RocnVcIik7XG5cdFx0XHRjb25zdCBncmlkID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1ncmlkXCIpO1xuXHRcdFx0JCh0aGlzKS5maW5kKFwiLmVkaXRvci1ibG9jay1saXN0X19sYXlvdXRcIikuYXR0cihcInN0eWxlXCIsIHN0eWxlcyk7XG5cdFx0fSk7XG5cdH1cblxuXHQkKCdib2R5Jykub24oJ0RPTU5vZGVJbnNlcnRlZCcsICcud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yJywgZnVuY3Rpb24gKGUpIHtcblx0XHRpZiAoJCgnLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvcicpKXtcblx0XHRcdHVwZGF0ZVN0eWxlc0dyaWQoKTtcblx0XHRcdHVwZGF0ZVN0eWxlc0dyaWRJdGVtKCk7XG5cdFx0XHRsaXN0ZW5Gb3JTdHlsZUNoYW5nZXNHcmlkKClcblx0XHRcdGxpc3RlbkZvclN0eWxlQ2hhbmdlc0dyaWRJdGVtKCk7XG5cdFx0fVxuXHR9KTtcblxuXHQkKHdpbmRvdykubG9hZChmdW5jdGlvbiAoKSB7XG5cdFx0dXBkYXRlU3R5bGVzR3JpZCgpO1xuXHRcdHVwZGF0ZVN0eWxlc0dyaWRJdGVtKCk7XG5cdFx0bGlzdGVuRm9yU3R5bGVDaGFuZ2VzR3JpZCgpXG5cdFx0bGlzdGVuRm9yU3R5bGVDaGFuZ2VzR3JpZEl0ZW0oKTtcblx0fSk7XG59KTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAd29yZHByZXNzL2kxOG4nO1xuXG4vLyBpbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByZXZpZXcgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcblx0cmVuZGVyKCl7XG5cdFx0Y29uc3Qge2xheW91dH0gPSB0aGlzLnByb3BzO1xuXHRcdHJldHVybihcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ2Vja28tZ3JpZC1sYXlvdXQtdGVtcGxhdGUtcHJldmlld1wiPlxuXHRcdFx0XHR7bGF5b3V0Lm1hcCgoYmxvY2ssa2V5KT0+e1xuXHRcdFx0XHRcdGNvbnN0IHN0eWxlcyA9IHtcblx0XHRcdFx0XHRcdGdyaWRDb2x1bW5FbmQ6ICdzcGFuICcgKyBibG9ja1sxXS53LFxuXHRcdFx0XHRcdFx0Z3JpZFJvd0VuZDogJ3NwYW4gJyArIGJsb2NrWzFdLmgsXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRyZXR1cm4oPGRpdiBrZXk9e2tleX0gY2xhc3NOYW1lPVwiZ2Vja28tZ3JpZC1sYXlvdXQtdGVtcGxhdGUtcHJldmlld19faXRlbVwiIHN0eWxlPXtzdHlsZXN9PjwvZGl2Pik7XG5cdFx0XHRcdH0pfVxuXHRcdFx0PC9kaXY+XG5cdFx0KVxuXHR9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQHdvcmRwcmVzcy9pMThuJztcbmltcG9ydCB7IElubmVyQmxvY2tzIH0gZnJvbSAnQHdvcmRwcmVzcy9lZGl0b3InO1xuaW1wb3J0IHRlbXBsYXRlcyBmcm9tICcuL3RlbXBsYXRlcyc7IC8vIEN1c3RvbSBUZW1wbGF0ZXMgdG8gY2hvb3NlIGZyb20uXG5pbXBvcnQgUHJldmlldyBmcm9tICcuL3RlbXBsYXRlLXByZXZpZXcnOyAvLyBDdXN0b20gVGVtcGxhdGVzIHRvIGNob29zZSBmcm9tLlxuXG4vLyBpbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbXBsYXRlU2VsZWN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblx0Y29uc3RydWN0b3IocHJvcHMpIHtcblx0XHRzdXBlcihwcm9wcyk7XG5cdFx0dGhpcy5zdGF0ZSA9IHtcblx0XHRcdHNlbGVjdGVkOiBudWxsLFxuXHRcdH1cblx0fVxuXHRzZXRUZW1wbGF0ZSA9ICh0ZW1wbGF0ZSkgPT4ge1xuXHRcdHRoaXMuc2V0U3RhdGUoe1xuXHRcdFx0c2VsZWN0ZWQ6IHRlbXBsYXRlLFxuXHRcdH0pXG5cdH1cblx0cmVuZGVyKCl7XG5cdFx0Y29uc3Qge2hhc0lubm5lckJsb2NrcywgYWxsb3dlZEJsb2Nrc30gPSB0aGlzLnByb3BzO1xuXHRcdGNvbnN0IHtzZWxlY3RlZH0gPSB0aGlzLnN0YXRlO1xuXHRcdGNvbnN0IGJsYW5rVGVtcGxhdGUgPSBbWydnZWNrby9ncmlkLWxheW91dC1iYXNpYycsIHtcblx0XHRcdFx0XHR3OiA2XG5cdFx0XHRcdH1dXTtcblx0XHRpZiAoIWhhc0lubm5lckJsb2NrcyAmJiAhc2VsZWN0ZWQpIHtcblx0XHRcdHJldHVybihcblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJnZWNrby1ncmlkLWxheW91dC10ZW1wbGF0ZS1zZWxlY3RcIj5cblx0XHRcdFx0XHQ8aDI+e19fKCdDaG9vc2UgYSBUZW1wbGF0ZScpfTwvaDI+XG5cdFx0XHRcdFx0PHA+e19fKCdUaGlzIGlzIGEgc3RhcnRpbmcgcG9pbnQuIFRlbXBsYXRlcyBtYWtlIGl0IGVhc3kgdG8gY2hvb3NlIGEgbGF5b3V0LiBCbG9ja3MgY2FuIGJlIGNoYW5nZWQgb25jZSB0aGV5IGFyZSBzZWxlY3RlZC4nKX08L3A+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJnZWNrby1ncmlkLWxheW91dC10ZW1wbGF0ZS1zZWxlY3RfX3RlbXBsYXRlc1wiPlxuXHRcdFx0XHRcdFx0e3RlbXBsYXRlcygpLm1hcCgodGVtcGxhdGUsIGtleSk9Pntcblx0XHRcdFx0XHRcdFx0cmV0dXJuKFxuXHRcdFx0XHRcdFx0XHRcdDxkaXYga2V5PXtrZXl9IGNsYXNzTmFtZT1cImdlY2tvLWdyaWQtbGF5b3V0LXRlbXBsYXRlLXNlbGVjdF9fdGVtcGxhdGVcIiBvbkNsaWNrPXsoKT0+dGhpcy5zZXRUZW1wbGF0ZSh0ZW1wbGF0ZS5sYXlvdXQpfT5cblx0XHRcdFx0XHRcdFx0XHRcdDxQcmV2aWV3IGxheW91dD17dGVtcGxhdGUubGF5b3V0fSAvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PHA+e3RlbXBsYXRlLmxhYmVsfTwvcD5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJnZWNrby1ncmlkLWxheW91dC10ZW1wbGF0ZS1zZWxlY3RfX3RlbXBsYXRlXCIgb25DbGljaz17KCk9PnRoaXMuc2V0VGVtcGxhdGUoYmxhbmtUZW1wbGF0ZSl9PjxQcmV2aWV3IGxheW91dD17YmxhbmtUZW1wbGF0ZX0gLz48cD57X18oJ0NyZWF0ZSBOZXcnKX08L3A+PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KVxuXHRcdH1cblx0XHRyZXR1cm4oXG5cdFx0XHQ8SW5uZXJCbG9ja3Ncblx0XHRcdFx0dGVtcGxhdGU9e3NlbGVjdGVkfVxuXHRcdFx0XHR0ZW1wbGF0ZUxvY2s9e2ZhbHNlfVxuXHRcdFx0XHRhbGxvd2VkQmxvY2tzPXthbGxvd2VkQmxvY2tzfVxuXHRcdFx0Lz5cblx0XHQpXG5cdH1cbn0iLCIvKipcbiAqIFdvcmRQcmVzcyBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgX18gfSBmcm9tICdAd29yZHByZXNzL2kxOG4nO1xuaW1wb3J0IHthcHBseUZpbHRlcnN9IGZyb20gJ0B3b3JkcHJlc3MvaG9va3MnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VGVtcGxhdGVzKCkge1xuXHRjb25zdCB0ZW1wbGF0ZXMgPSBbe1xuXHRcdFx0bGFiZWw6IF9fKCcyIENvbHVtbnMnKSxcblx0XHRcdGxheW91dDogW1xuXHRcdFx0XHRbJ2dlY2tvL2dyaWQtbGF5b3V0LWJhc2ljJywge1xuXHRcdFx0XHRcdHc6IDZcblx0XHRcdFx0fV0sXG5cdFx0XHRcdFsnZ2Vja28vZ3JpZC1sYXlvdXQtYmFzaWMnLCB7XG5cdFx0XHRcdFx0dzogNlxuXHRcdFx0XHR9XSxcblx0XHRcdF1cblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiBfXygnMyBDb2x1bW5zJyksXG5cdFx0XHRsYXlvdXQ6IFtcblx0XHRcdFx0WydnZWNrby9ncmlkLWxheW91dC1iYXNpYycsIHtcblx0XHRcdFx0XHR3OiA0XG5cdFx0XHRcdH1dLFxuXHRcdFx0XHRbJ2dlY2tvL2dyaWQtbGF5b3V0LWJhc2ljJywge1xuXHRcdFx0XHRcdHc6IDRcblx0XHRcdFx0fV0sXG5cdFx0XHRcdFsnZ2Vja28vZ3JpZC1sYXlvdXQtYmFzaWMnLCB7XG5cdFx0XHRcdFx0dzogNFxuXHRcdFx0XHR9XSxcblx0XHRcdF1cblx0XHR9LFxuXHRdO1xuXHRyZXR1cm4gYXBwbHlGaWx0ZXJzKCdnZWNrby5ncmlkLWxheW91dC50ZW1wbGF0ZXMnLCB0ZW1wbGF0ZXMpO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cud3AuYmxvY2tzOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LndwLmNvbXBvbmVudHM7IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cud3AuZGF0YTsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy53cC5lZGl0b3I7IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cud3AuZWxlbWVudDsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy53cC5ob29rczsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy53cC5pMThuOyIsIm1vZHVsZS5leHBvcnRzID0gUmVhY3Q7Il0sInNvdXJjZVJvb3QiOiIifQ== 1 !function(n){var r={};function a(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.m=n,a.c=r,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)a.d(n,r,function(e){return t[e]}.bind(null,r));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="/wp-content/plugins/gecko-grid-layout/dist/",a(a.s=21)}([function(e,t){e.exports=React},function(e,t){e.exports=window.wp.components},function(e,t){e.exports=window.wp.i18n},function(e,t){e.exports=window.wp.editor},function(e,t){e.exports=window.wp.element},function(e,t){e.exports=window.wp.blocks},function(e,t){e.exports=window.wp.data},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}e.exports=function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}},function(e,t,n){var r=n(16),a=n(12);e.exports=function(e,t){return!t||"object"!==r(t)&&"function"!=typeof t?a(e):t}},function(t,e){function n(e){return t.exports=n=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},n(e)}t.exports=n},function(e,t,n){var r=n(17);e.exports=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&r(e,t)}},function(e,t){e.exports=function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}},function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(e,t){e.exports=window.wp.hooks},function(z,D,G){var q;!function(f){var g=/^\s+/,d=/\s+$/,r=0,i=f.round,h=f.min,m=f.max,e=f.random;function u(e,t){if(t=t||{},(e=e||"")instanceof u)return e;if(!(this instanceof u))return new u(e,t);var n=function(e){var t={r:0,g:0,b:0},n=1,r=null,a=null,o=null,i=!1,l=!1;"string"==typeof e&&(e=function(e){e=e.replace(g,"").replace(d,"").toLowerCase();var t,n=!1;if(A[e])e=A[e],n=!0;else if("transparent"==e)return{r:0,g:0,b:0,a:0,format:"name"};if(t=T.rgb.exec(e))return{r:t[1],g:t[2],b:t[3]};if(t=T.rgba.exec(e))return{r:t[1],g:t[2],b:t[3],a:t[4]};if(t=T.hsl.exec(e))return{h:t[1],s:t[2],l:t[3]};if(t=T.hsla.exec(e))return{h:t[1],s:t[2],l:t[3],a:t[4]};if(t=T.hsv.exec(e))return{h:t[1],s:t[2],v:t[3]};if(t=T.hsva.exec(e))return{h:t[1],s:t[2],v:t[3],a:t[4]};if(t=T.hex8.exec(e))return{r:L(t[1]),g:L(t[2]),b:L(t[3]),a:I(t[4]),format:n?"name":"hex8"};if(t=T.hex6.exec(e))return{r:L(t[1]),g:L(t[2]),b:L(t[3]),format:n?"name":"hex"};if(t=T.hex4.exec(e))return{r:L(t[1]+""+t[1]),g:L(t[2]+""+t[2]),b:L(t[3]+""+t[3]),a:I(t[4]+""+t[4]),format:n?"name":"hex8"};if(t=T.hex3.exec(e))return{r:L(t[1]+""+t[1]),g:L(t[2]+""+t[2]),b:L(t[3]+""+t[3]),format:n?"name":"hex"};return!1}(e));"object"==typeof e&&(U(e.r)&&U(e.g)&&U(e.b)?(c=e.r,s=e.g,u=e.b,t={r:255*j(c,255),g:255*j(s,255),b:255*j(u,255)},i=!0,l="%"===String(e.r).substr(-1)?"prgb":"rgb"):U(e.h)&&U(e.s)&&U(e.v)?(r=M(e.s),a=M(e.v),t=function(e,t,n){e=6*j(e,360),t=j(t,100),n=j(n,100);var r=f.floor(e),a=e-r,o=n*(1-t),i=n*(1-a*t),l=n*(1-(1-a)*t),c=r%6;return{r:255*[n,i,o,o,l,n][c],g:255*[l,n,n,i,o,o][c],b:255*[o,o,l,n,n,i][c]}}(e.h,r,a),i=!0,l="hsv"):U(e.h)&&U(e.s)&&U(e.l)&&(r=M(e.s),o=M(e.l),t=function(e,t,n){var r,a,o;function i(e,t,n){return n<0&&(n+=1),1<n&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}if(e=j(e,360),t=j(t,100),n=j(n,100),0===t)r=a=o=n;else{var l=n<.5?n*(1+t):n+t-n*t,c=2*n-l;r=i(c,l,e+1/3),a=i(c,l,e),o=i(c,l,e-1/3)}return{r:255*r,g:255*a,b:255*o}}(e.h,r,o),i=!0,l="hsl"),e.hasOwnProperty("a")&&(n=e.a));var c,s,u;return n=S(n),{ok:i,format:e.format||l,r:h(255,m(t.r,0)),g:h(255,m(t.g,0)),b:h(255,m(t.b,0)),a:n}}(e);this._originalInput=e,this._r=n.r,this._g=n.g,this._b=n.b,this._a=n.a,this._roundA=i(100*this._a)/100,this._format=t.format||n.format,this._gradientType=t.gradientType,this._r<1&&(this._r=i(this._r)),this._g<1&&(this._g=i(this._g)),this._b<1&&(this._b=i(this._b)),this._ok=n.ok,this._tc_id=r++}function a(e,t,n){e=j(e,255),t=j(t,255),n=j(n,255);var r,a,o=m(e,t,n),i=h(e,t,n),l=(o+i)/2;if(o==i)r=a=0;else{var c=o-i;switch(a=.5<l?c/(2-o-i):c/(o+i),o){case e:r=(t-n)/c+(t<n?6:0);break;case t:r=(n-e)/c+2;break;case n:r=(e-t)/c+4}r/=6}return{h:r,s:a,l:l}}function o(e,t,n){e=j(e,255),t=j(t,255),n=j(n,255);var r,a,o=m(e,t,n),i=h(e,t,n),l=o,c=o-i;if(a=0===o?0:c/o,o==i)r=0;else{switch(o){case e:r=(t-n)/c+(t<n?6:0);break;case t:r=(n-e)/c+2;break;case n:r=(e-t)/c+4}r/=6}return{h:r,s:a,v:l}}function t(e,t,n,r){var a=[R(i(e).toString(16)),R(i(t).toString(16)),R(i(n).toString(16))];return r&&a[0].charAt(0)==a[0].charAt(1)&&a[1].charAt(0)==a[1].charAt(1)&&a[2].charAt(0)==a[2].charAt(1)?a[0].charAt(0)+a[1].charAt(0)+a[2].charAt(0):a.join("")}function l(e,t,n,r){return[R(H(r)),R(i(e).toString(16)),R(i(t).toString(16)),R(i(n).toString(16))].join("")}function n(e,t){t=0===t?0:t||10;var n=u(e).toHsl();return n.s-=t/100,n.s=B(n.s),u(n)}function c(e,t){t=0===t?0:t||10;var n=u(e).toHsl();return n.s+=t/100,n.s=B(n.s),u(n)}function s(e){return u(e).desaturate(100)}function b(e,t){t=0===t?0:t||10;var n=u(e).toHsl();return n.l+=t/100,n.l=B(n.l),u(n)}function p(e,t){t=0===t?0:t||10;var n=u(e).toRgb();return n.r=m(0,h(255,n.r-i(-t/100*255))),n.g=m(0,h(255,n.g-i(-t/100*255))),n.b=m(0,h(255,n.b-i(-t/100*255))),u(n)}function y(e,t){t=0===t?0:t||10;var n=u(e).toHsl();return n.l-=t/100,n.l=B(n.l),u(n)}function v(e,t){var n=u(e).toHsl(),r=(n.h+t)%360;return n.h=r<0?360+r:r,u(n)}function _(e){var t=u(e).toHsl();return t.h=(t.h+180)%360,u(t)}function k(e){var t=u(e).toHsl(),n=t.h;return[u(e),u({h:(n+120)%360,s:t.s,l:t.l}),u({h:(n+240)%360,s:t.s,l:t.l})]}function w(e){var t=u(e).toHsl(),n=t.h;return[u(e),u({h:(n+90)%360,s:t.s,l:t.l}),u({h:(n+180)%360,s:t.s,l:t.l}),u({h:(n+270)%360,s:t.s,l:t.l})]}function E(e){var t=u(e).toHsl(),n=t.h;return[u(e),u({h:(n+72)%360,s:t.s,l:t.l}),u({h:(n+216)%360,s:t.s,l:t.l})]}function x(e,t,n){t=t||6,n=n||30;var r=u(e).toHsl(),a=360/n,o=[u(e)];for(r.h=(r.h-(a*t>>1)+720)%360;--t;)r.h=(r.h+a)%360,o.push(u(r));return o}function C(e,t){t=t||6;for(var n=u(e).toHsv(),r=n.h,a=n.s,o=n.v,i=[],l=1/t;t--;)i.push(u({h:r,s:a,v:o})),o=(o+l)%1;return i}u.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var e=this.toRgb();return(299*e.r+587*e.g+114*e.b)/1e3},getLuminance:function(){var e,t,n,r=this.toRgb();return e=r.r/255,t=r.g/255,n=r.b/255,.2126*(e<=.03928?e/12.92:f.pow((e+.055)/1.055,2.4))+.7152*(t<=.03928?t/12.92:f.pow((t+.055)/1.055,2.4))+.0722*(n<=.03928?n/12.92:f.pow((n+.055)/1.055,2.4))},setAlpha:function(e){return this._a=S(e),this._roundA=i(100*this._a)/100,this},toHsv:function(){var e=o(this._r,this._g,this._b);return{h:360*e.h,s:e.s,v:e.v,a:this._a}},toHsvString:function(){var e=o(this._r,this._g,this._b),t=i(360*e.h),n=i(100*e.s),r=i(100*e.v);return 1==this._a?"hsv("+t+", "+n+"%, "+r+"%)":"hsva("+t+", "+n+"%, "+r+"%, "+this._roundA+")"},toHsl:function(){var e=a(this._r,this._g,this._b);return{h:360*e.h,s:e.s,l:e.l,a:this._a}},toHslString:function(){var e=a(this._r,this._g,this._b),t=i(360*e.h),n=i(100*e.s),r=i(100*e.l);return 1==this._a?"hsl("+t+", "+n+"%, "+r+"%)":"hsla("+t+", "+n+"%, "+r+"%, "+this._roundA+")"},toHex:function(e){return t(this._r,this._g,this._b,e)},toHexString:function(e){return"#"+this.toHex(e)},toHex8:function(e){return function(e,t,n,r,a){var o=[R(i(e).toString(16)),R(i(t).toString(16)),R(i(n).toString(16)),R(H(r))];if(a&&o[0].charAt(0)==o[0].charAt(1)&&o[1].charAt(0)==o[1].charAt(1)&&o[2].charAt(0)==o[2].charAt(1)&&o[3].charAt(0)==o[3].charAt(1))return o[0].charAt(0)+o[1].charAt(0)+o[2].charAt(0)+o[3].charAt(0);return o.join("")}(this._r,this._g,this._b,this._a,e)},toHex8String:function(e){return"#"+this.toHex8(e)},toRgb:function(){return{r:i(this._r),g:i(this._g),b:i(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+i(this._r)+", "+i(this._g)+", "+i(this._b)+")":"rgba("+i(this._r)+", "+i(this._g)+", "+i(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:i(100*j(this._r,255))+"%",g:i(100*j(this._g,255))+"%",b:i(100*j(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+i(100*j(this._r,255))+"%, "+i(100*j(this._g,255))+"%, "+i(100*j(this._b,255))+"%)":"rgba("+i(100*j(this._r,255))+"%, "+i(100*j(this._g,255))+"%, "+i(100*j(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(O[t(this._r,this._g,this._b,!0)]||!1)},toFilter:function(e){var t="#"+l(this._r,this._g,this._b,this._a),n=t,r=this._gradientType?"GradientType = 1, ":"";if(e){var a=u(e);n="#"+l(a._r,a._g,a._b,a._a)}return"progid:DXImageTransform.Microsoft.gradient("+r+"startColorstr="+t+",endColorstr="+n+")"},toString:function(e){var t=!!e;e=e||this._format;var n=!1,r=this._a<1&&0<=this._a;return t||!r||"hex"!==e&&"hex6"!==e&&"hex3"!==e&&"hex4"!==e&&"hex8"!==e&&"name"!==e?("rgb"===e&&(n=this.toRgbString()),"prgb"===e&&(n=this.toPercentageRgbString()),"hex"!==e&&"hex6"!==e||(n=this.toHexString()),"hex3"===e&&(n=this.toHexString(!0)),"hex4"===e&&(n=this.toHex8String(!0)),"hex8"===e&&(n=this.toHex8String()),"name"===e&&(n=this.toName()),"hsl"===e&&(n=this.toHslString()),"hsv"===e&&(n=this.toHsvString()),n||this.toHexString()):"name"===e&&0===this._a?this.toName():this.toRgbString()},clone:function(){return u(this.toString())},_applyModification:function(e,t){var n=e.apply(null,[this].concat([].slice.call(t)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification(b,arguments)},brighten:function(){return this._applyModification(p,arguments)},darken:function(){return this._applyModification(y,arguments)},desaturate:function(){return this._applyModification(n,arguments)},saturate:function(){return this._applyModification(c,arguments)},greyscale:function(){return this._applyModification(s,arguments)},spin:function(){return this._applyModification(v,arguments)},_applyCombination:function(e,t){return e.apply(null,[this].concat([].slice.call(t)))},analogous:function(){return this._applyCombination(x,arguments)},complement:function(){return this._applyCombination(_,arguments)},monochromatic:function(){return this._applyCombination(C,arguments)},splitcomplement:function(){return this._applyCombination(E,arguments)},triad:function(){return this._applyCombination(k,arguments)},tetrad:function(){return this._applyCombination(w,arguments)}},u.fromRatio=function(e,t){if("object"==typeof e){var n={};for(var r in e)e.hasOwnProperty(r)&&(n[r]="a"===r?e[r]:M(e[r]));e=n}return u(e,t)},u.equals=function(e,t){return!(!e||!t)&&u(e).toRgbString()==u(t).toRgbString()},u.random=function(){return u.fromRatio({r:e(),g:e(),b:e()})},u.mix=function(e,t,n){n=0===n?0:n||50;var r=u(e).toRgb(),a=u(t).toRgb(),o=n/100;return u({r:(a.r-r.r)*o+r.r,g:(a.g-r.g)*o+r.g,b:(a.b-r.b)*o+r.b,a:(a.a-r.a)*o+r.a})},u.readability=function(e,t){var n=u(e),r=u(t);return(f.max(n.getLuminance(),r.getLuminance())+.05)/(f.min(n.getLuminance(),r.getLuminance())+.05)},u.isReadable=function(e,t,n){var r,a,o=u.readability(e,t);switch(a=!1,(r=function(e){var t,n;t=((e=e||{level:"AA",size:"small"}).level||"AA").toUpperCase(),n=(e.size||"small").toLowerCase(),"AA"!==t&&"AAA"!==t&&(t="AA");"small"!==n&&"large"!==n&&(n="small");return{level:t,size:n}}(n)).level+r.size){case"AAsmall":case"AAAlarge":a=4.5<=o;break;case"AAlarge":a=3<=o;break;case"AAAsmall":a=7<=o}return a},u.mostReadable=function(e,t,n){var r,a,o,i,l=null,c=0;a=(n=n||{}).includeFallbackColors,o=n.level,i=n.size;for(var s=0;s<t.length;s++)c<(r=u.readability(e,t[s]))&&(c=r,l=u(t[s]));return u.isReadable(e,l,{level:o,size:i})||!a?l:(n.includeFallbackColors=!1,u.mostReadable(e,["#fff","#000"],n))};var A=u.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},O=u.hexNames=function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[e[n]]=n);return t}(A);function S(e){return e=parseFloat(e),(isNaN(e)||e<0||1<e)&&(e=1),e}function j(e,t){var n;"string"==typeof(n=e)&&-1!=n.indexOf(".")&&1===parseFloat(n)&&(e="100%");var r,a="string"==typeof(r=e)&&-1!=r.indexOf("%");return e=h(t,m(0,parseFloat(e))),a&&(e=parseInt(e*t,10)/100),f.abs(e-t)<1e-6?1:e%t/parseFloat(t)}function B(e){return h(1,m(0,e))}function L(e){return parseInt(e,16)}function R(e){return 1==e.length?"0"+e:""+e}function M(e){return e<=1&&(e=100*e+"%"),e}function H(e){return f.round(255*parseFloat(e)).toString(16)}function I(e){return L(e)/255}var N,P,F,T=(P="[\\s|\\(]+("+(N="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)")+")[,|\\s]+("+N+")[,|\\s]+("+N+")\\s*\\)?",F="[\\s|\\(]+("+N+")[,|\\s]+("+N+")[,|\\s]+("+N+")[,|\\s]+("+N+")\\s*\\)?",{CSS_UNIT:new RegExp(N),rgb:new RegExp("rgb"+P),rgba:new RegExp("rgba"+F),hsl:new RegExp("hsl"+P),hsla:new RegExp("hsla"+F),hsv:new RegExp("hsv"+P),hsva:new RegExp("hsva"+F),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function U(e){return!!T.CSS_UNIT.exec(e)}z.exports?z.exports=u:void 0===(q=function(){return u}.call(D,G,D,z))||(z.exports=q)}(Math)},function(t,e){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(e){return"function"==typeof Symbol&&"symbol"===n(Symbol.iterator)?t.exports=r=function(e){return n(e)}:t.exports=r=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":n(e)},r(e)}t.exports=r},function(n,e){function r(e,t){return n.exports=r=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},r(e,t)}n.exports=r},,,,function(e,t,n){"use strict";n.r(t);var u=n(5),b=n(4),r=n(0),p=n.n(r),y=n(2),v=n(1),_=n(3),k=n(6),a=n(7),o=n.n(a),i=n(8),l=n.n(i),c=n(9),s=n.n(c),f=n(10),g=n.n(f),d=n(12),h=n.n(d),m=n(11),w=n.n(m),E=n(13),x=n.n(E),C=n(14);var A=function(e){function t(){return o()(this,t),s()(this,g()(t).apply(this,arguments))}return w()(t,e),l()(t,[{key:"render",value:function(){var e=this.props.layout;return p.a.createElement("div",{className:"gecko-grid-layout-template-preview"},e.map(function(e,t){var n={gridColumnEnd:"span "+e[1].w,gridRowEnd:"span "+e[1].h};return p.a.createElement("div",{key:t,className:"gecko-grid-layout-template-preview__item",style:n})}))}}]),t}(p.a.PureComponent),O=function(e){function n(e){var t;return o()(this,n),t=s()(this,g()(n).call(this,e)),x()(h()(t),"setTemplate",function(e){t.setState({selected:e})}),t.state={selected:null},t}return w()(n,e),l()(n,[{key:"render",value:function(){var e,n=this,t=this.props,r=t.hasInnnerBlocks,a=t.allowedBlocks,o=this.state.selected,i=[["gecko/grid-layout-basic",{w:6}]];return r||o?p.a.createElement(_.InnerBlocks,{template:o,templateLock:!1,allowedBlocks:a}):p.a.createElement("div",{className:"gecko-grid-layout-template-select"},p.a.createElement("h2",null,Object(y.__)("Choose a Template")),p.a.createElement("p",null,Object(y.__)("This is a starting point. Templates make it easy to choose a layout. Blocks can be changed once they are selected.")),p.a.createElement("div",{className:"gecko-grid-layout-template-select__templates"},(e=[{label:Object(y.__)("2 Columns"),layout:[["gecko/grid-layout-basic",{w:6}],["gecko/grid-layout-basic",{w:6}]]},{label:Object(y.__)("3 Columns"),layout:[["gecko/grid-layout-basic",{w:4}],["gecko/grid-layout-basic",{w:4}],["gecko/grid-layout-basic",{w:4}]]}],Object(C.applyFilters)("gecko.grid-layout.templates",e)).map(function(e,t){return p.a.createElement("div",{key:t,className:"gecko-grid-layout-template-select__template",onClick:function(){return n.setTemplate(e.layout)}},p.a.createElement(A,{layout:e.layout}),p.a.createElement("p",null,e.label))}),p.a.createElement("div",{className:"gecko-grid-layout-template-select__template",onClick:function(){return n.setTemplate(i)}},p.a.createElement(A,{layout:i}),p.a.createElement("p",null,Object(y.__)("Create New")))))}}]),n}(p.a.Component),S=["gecko/grid-layout-item","gecko/grid-layout-image","gecko/grid-layout-basic"],j={title:Object(y.__)("Grid"),icon:p.a.createElement(v.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},p.a.createElement(v.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),p.a.createElement(v.G,null,p.a.createElement(v.Path,{d:"M4,13 L8,13 L8,10 L4,10 L4,13 Z M4,15 L4,18 L8,18 L8,15 L4,15 Z M10,13 L14,13 L14,10 L10,10 L10,13 Z M10,15 L10,18 L14,18 L14,15 L10,15 Z M20,13 L20,10 L16,10 L16,13 L20,13 Z M20,15 L16,15 L16,18 L20,18 L20,15 Z M4,8 L8,8 L8,5 L4,5 L4,8 Z M10,8 L14,8 L14,5 L10,5 L10,8 Z M20,8 L20,5 L16,5 L16,8 L20,8 Z M4,3 L20,3 C21.1045695,3 22,3.95139491 22,5.125 L22,17.875 C22,19.0486051 21.1045695,20 20,20 L4,20 C2.8954305,20 2,19.0486051 2,17.875 L2,5.125 C2,3.95139491 2.8954305,3 4,3 Z"}))),category:"layout",description:Object(y.__)("Use CSS Grid to build layouts and, then add whatever content blocks you’d like."),supports:{align:["wide","full"],html:!1},deprecated:[{migrate:function(){},save:function(){return p.a.createElement(_.InnerBlocks.Content,null)}}],transforms:{from:[{type:"block",blocks:["core/columns"],transform:function(e){var t=Object(k.select)("core/editor").getSelectedBlock().innerBlocks,n=t.length,r=Math.floor(12/n),a=[];return t.map(function(e){var t=Object(u.createBlock)("gecko/grid-layout-basic",{w:r},e.innerBlocks);a.push(t)}),Object(u.createBlock)("gecko/grid-layout",{},a)}}]},styles:[{name:"default",label:Object(y.__)("Default"),isDefault:!0},{name:"no-gap",label:Object(y.__)("No Gap")}],edit:function(e){var t=e.insertBlocksAfter,n=e.clientId,r=Object(k.select)("core/editor").getBlocksByClientId(n)[0],a=!(!r||!r.innerBlocks)&&0<r.innerBlocks.length;return p.a.createElement(b.Fragment,null,p.a.createElement("div",{className:"wp-block-gecko-grid-layout-editor"},"function"==typeof t?p.a.createElement(O,{hasInnnerBlocks:a,allowedBlocks:S}):p.a.createElement("p",null,Object(y.__)("Preview Not Available"))))},save:function(){return p.a.createElement("div",null,p.a.createElement(_.InnerBlocks.Content,null))}},B=n(15),L=n.n(B),R={title:Object(y.__)("Experimental (Do Not Use)"),parent:["gecko/grid-layout"],icon:p.a.createElement(v.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},p.a.createElement(v.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),p.a.createElement(v.Path,{d:"M11.99 18.54l-7.37-5.73L3 14.07l9 7 9-7-1.63-1.27zM12 16l7.36-5.73L21 9l-9-7-9 7 1.63 1.27L12 16zm0-11.47L17.74 9 12 13.47 6.26 9 12 4.53z"})),description:Object(y.__)("A single grid item within a grid block."),category:"common",supports:{className:!0,inserter:!0,reusable:!1,html:!1},styles:[{name:"default",label:Object(y.__)("Default"),isDefault:!0},{name:"hover",label:Object(y.__)("Hover")}],attributes:{type:{type:"string",default:void 0},h:{type:"number",default:1},w:{type:"number"},minHeight:{type:"number",default:200},opacity:{type:"number",default:1},bgMedia:{type:"number"},bgMediaUrl:{type:"string"},bgColor:{type:"string"},bgColorSlug:{type:"string"},bgColorBrightness:{type:"number"}},transforms:{from:[{type:"block",blocks:["gecko/grid-layout-image","gecko/grid-layout-basic"],transform:function(e,t){var n=Object(k.select)("core/editor").getSelectedBlock(),r=e.h,a=e.w,o=e.imgId,i=e.imgUrl,l=e.mediaId,c=e.mediaUrl,s=e.minHeight;return Object(u.createBlock)("gecko/grid-layout-item",{h:r,w:a,bgMedia:o||l,bgMediaUrl:i||c,minHeight:s},n.innerBlocks)}}]},deprecated:[{migrate:function(){},save:function(){return p.a.createElement(_.InnerBlocks.Content,null)}}],edit:function(e){var t=e.attributes,a=e.setAttributes,n=(e.className,e.insertBlocksAfter),r=t.opacity,o=t.h,i=t.w,l=t.type,c=(t.padding,t.bgMedia),s=t.bgMediaUrl,u=t.bgColor,f=t.bgColorBrightness,g=t.bgColorSlug,d=t.minHeight,h={"--background":u,"--opacity":r,gridColumnEnd:"span "+i,gridRowEnd:"span "+o,backgroundColor:u,backgroundImage:"url("+s+")",minHeight:d+"px"},m="light";return f<130&&(m="dark"),p.a.createElement(b.Fragment,null,p.a.createElement(_.InspectorControls,null,p.a.createElement(v.PanelBody,{title:"Settings"},p.a.createElement(v.RangeControl,{label:Object(y.__)("Width"),value:i,onChange:function(e){a({w:e})},min:1,max:12}),p.a.createElement(v.RangeControl,{label:Object(y.__)("Span Rows"),value:o,onChange:function(e){a({h:e})},min:1,max:12})),p.a.createElement(v.PanelBody,{title:"Style"},p.a.createElement(v.RangeControl,{label:Object(y.__)("Minimum Height"),value:d,onChange:function(e){a({minHeight:e})},min:"50",max:"600",step:"1"}),"solid"!==l&&p.a.createElement(_.MediaUpload,{onSelect:function(e){a({bgMedia:e.id,bgMediaUrl:e.url})},type:["image","video"],value:c||null,render:function(e){var t=e.open;return p.a.createElement("div",null,s&&p.a.createElement("img",{src:s,onClick:t,width:"100%",height:"auto",style:{cursor:"pointer"}}),!s&&p.a.createElement("div",{className:"button button-large",onClick:t},"Choose Background"))}}),p.a.createElement("hr",null),p.a.createElement("div",null,p.a.createElement(_.ColorPalette,{label:"Background Color",value:u?u.color:void 0,onChange:function(e){var t=Object(k.select)("core/editor").getEditorSettings(),n=e?Object(_.getColorObjectByColorValue)(t.colors,e).slug:void 0;a({bgColorSlug:n});var r=e?L()(e).getBrightness():void 0;a({bgColorBrightness:r}),a({bgColor:e})}}),p.a.createElement("hr",null)))),p.a.createElement("div",{className:"gecko-grid-layout-editor-styles",style:h}),p.a.createElement("div",{className:"wp-block-gecko-grid-layout-editor__wrap".concat(l," ").concat(t.className," has-").concat(g,"-background-color is-").concat(m,"-background")},("image"===l||"image-content"===l)&&!c&&p.a.createElement(_.MediaPlaceholder,{onSelect:function(e){a({bgMedia:e.id,bgMediaUrl:e.url})},allowedTypes:["image"],accept:"image/*"}),"function"==typeof n&&p.a.createElement(_.InnerBlocks,{templateLock:!1})))},save:function(){return p.a.createElement("div",null,p.a.createElement(_.InnerBlocks.Content,null))}},M=["core/paragraph","core/heading","core/button","core/list","core/quote"],H={title:Object(y.__)("Image"),parent:["gecko/grid-layout"],icon:p.a.createElement(v.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},p.a.createElement(v.Path,{d:"M0,0h24v24H0V0z",fill:"none"}),p.a.createElement(v.Path,{d:"m19 5v14h-14v-14h14m0-2h-14c-1.1 0-2 0.9-2 2v14c0 1.1 0.9 2 2 2h14c1.1 0 2-0.9 2-2v-14c0-1.1-0.9-2-2-2z"}),p.a.createElement(v.Path,{d:"m14.14 11.86l-3 3.87-2.14-2.59-3 3.86h12l-3.86-5.14z"})),description:Object(y.__)("An image Grid Block."),category:"common",supports:{className:!0,inserter:!0,reusable:!1,html:!1},styles:[{name:"default",label:Object(y.__)("Default"),isDefault:!0},{name:"hover",label:Object(y.__)("Hover")},{name:"no-caption",label:Object(y.__)("No Caption")}],attributes:{h:{type:"number",default:1},w:{type:"number",default:1},minHeight:{type:"number",default:200},imgId:{type:"number"},imgUrl:{type:"string"}},transforms:{from:[{type:"block",blocks:["gecko/grid-layout-basic","gecko/grid-layout-item"],transform:function(e,t){var n=Object(k.select)("core/editor").getSelectedBlock(),r=e.h,a=e.w,o=e.bgMedia,i=e.bgMediaUrl,l=e.mediaId,c=e.mediaUrl,s=e.minHeight;return Object(u.createBlock)("gecko/grid-layout-image",{h:r,w:a,imgId:o||l,imgUrl:i||c,minHeight:s},n.innerBlocks)}}]},deprecated:[{migrate:function(){},save:function(){return p.a.createElement(_.InnerBlocks.Content,null)}}],edit:function(e){var t=e.attributes,n=e.setAttributes,r=(e.className,e.insertBlocksAfter),a=t.h,o=t.w,i=t.imgId,l=t.imgUrl,c=t.minHeight,s={gridColumnEnd:"span "+o,gridRowEnd:"span "+a,minHeight:c+"px"};return p.a.createElement(b.Fragment,null,p.a.createElement(_.InspectorControls,null,p.a.createElement(v.PanelBody,{title:"Grid Item"},p.a.createElement(v.RangeControl,{label:Object(y.__)("Minimum Height"),value:c,onChange:function(e){n({minHeight:e})},min:"50",max:"600",step:"1"}),p.a.createElement(v.RangeControl,{label:Object(y.__)("Width"),value:o,onChange:function(e){n({w:e})},min:1,max:12}),p.a.createElement(v.RangeControl,{label:Object(y.__)("Span Rows"),value:a,onChange:function(e){n({h:e})},min:1,max:12}))),p.a.createElement(_.BlockControls,null,p.a.createElement(v.Toolbar,null,p.a.createElement(_.MediaUpload,{onSelect:function(e){n({imgId:e.id,imgUrl:e.url})},type:["image"],value:i||null,render:function(e){var t=e.open;return p.a.createElement(v.IconButton,{className:"components-icon-button components-toolbar__control",label:Object(y.__)("Edit image"),onClick:t,icon:"edit"})}}))),p.a.createElement("div",{className:"gecko-grid-layout-editor-styles",style:s}),p.a.createElement("figure",{className:"wp-block-gecko-grid-layout-editor__wrap gecko-grid-layout-image ".concat(t.className)},!i&&p.a.createElement(_.MediaPlaceholder,{onSelect:function(e){n({imgId:e.id,imgUrl:e.url})},allowedTypes:["image"],accept:"image/*"}),l&&p.a.createElement("img",{className:"gecko-grid-layout-image__image",src:l}),i&&p.a.createElement("figcaption",{className:"gecko-grid-layout-image__caption"},"function"==typeof r?p.a.createElement(_.InnerBlocks,{templateLock:!1,allowedBlocks:M}):p.a.createElement("p",null,"Lorem Ipsum"))))},save:function(){return p.a.createElement("div",null,p.a.createElement(_.InnerBlocks.Content,null))}},I={title:Object(y.__)("Basic"),parent:["gecko/grid-layout"],icon:p.a.createElement(v.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},p.a.createElement(v.Path,{d:"M0,0h24v24H0V0z M0,0h24v24H0V0z",fill:"none"}),p.a.createElement(v.Path,{d:"m20 7v10h-16v-10h16m0-2h-16c-1.1 0-1.99 0.9-1.99 2l-0.01 10c0 1.1 0.9 2 2 2h16c1.1 0 2-0.9 2-2v-10c0-1.1-0.9-2-2-2z"}),p.a.createElement(v.Rect,{x:"11",y:"8",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"11",y:"11",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"8",y:"8",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"8",y:"11",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"5",y:"11",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"5",y:"8",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"8",y:"14",width:"8",height:"2"}),p.a.createElement(v.Rect,{x:"14",y:"11",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"14",y:"8",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"17",y:"11",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"17",y:"8",width:"2",height:"2"})),description:Object(y.__)("An image grid block."),category:"common",supports:{className:!0,inserter:!0,reusable:!1,html:!1},styles:[{name:"default",label:Object(y.__)("Default"),isDefault:!0}],attributes:{h:{type:"number",default:1},w:{type:"number",default:1}},transforms:{from:[{type:"block",blocks:["gecko/grid-layout-image","gecko/grid-layout-item"],transform:function(e,t){var n=Object(k.select)("core/editor").getSelectedBlock(),r=e.h,a=e.w;return Object(u.createBlock)("gecko/grid-layout-basic",{h:r,w:a},n.innerBlocks)}}]},deprecated:[{migrate:function(){},save:function(){return p.a.createElement(_.InnerBlocks.Content,null)}}],edit:function(e){var t=e.attributes,n=e.setAttributes,r=(e.className,e.insertBlocksAfter),a=t.h,o=t.w,i={gridColumnEnd:"span "+o,gridRowEnd:"span "+a};return p.a.createElement(b.Fragment,null,p.a.createElement(_.InspectorControls,null,p.a.createElement(v.PanelBody,{title:"Grid Item"},p.a.createElement(v.RangeControl,{label:Object(y.__)("Width"),value:o,onChange:function(e){n({w:e})},min:1,max:12}),p.a.createElement(v.RangeControl,{label:Object(y.__)("Span Rows"),value:a,onChange:function(e){n({h:e})},min:1,max:12}))),p.a.createElement("div",{className:"gecko-grid-layout-editor-styles",style:i}),p.a.createElement("div",{className:"wp-block-gecko-grid-layout-editor__wrap gecko-grid-layout-basic ".concat(t.className)},"function"==typeof r?p.a.createElement(_.InnerBlocks,{templateLock:!1}):p.a.createElement("p",null,"Lorem Ipsum")))},save:function(){return p.a.createElement("div",null,p.a.createElement(_.InnerBlocks.Content,null))}};Object(u.registerBlockType)("gecko/grid-layout",j),Object(u.registerBlockType)("gecko/grid-layout-basic",I),Object(u.registerBlockType)("gecko/grid-layout-image",H),Object(u.registerBlockType)("gecko/grid-layout-item",R),jQuery(function(t){function n(){t(".gecko-grid-layout-editor-styles").each(function(){var e=new MutationObserver(function(e){e.forEach(function(e){t('[data-type="gecko/grid-layout-basic"]').each(function(){var e=t(this).find(".gecko-grid-layout-editor-styles").attr("style");t(this).attr("style",e)}),t('[data-type="gecko/grid-layout-image"]').each(function(){var e=t(this).find(".gecko-grid-layout-editor-styles").attr("style");t(this).attr("style",e)}),t('[data-type="gecko/grid-layout-item"]').each(function(){var e=t(this).find(".gecko-grid-layout-editor-styles").attr("style");t(this).attr("style",e)})})});e.disconnect(),e.observe(this,{attributes:!0,attributeFilter:["style"]})})}function r(){t(".wp-block-gecko-grid-layout-editor").each(function(){var e=new MutationObserver(function(e){e.forEach(function(e){t(".wp-block-gecko-grid-layout-editor").each(function(){var e=t(this).attr("data-passthru");t(this).attr("data-grid");t(this).find(".editor-block-list__layout").attr("style",e)})})});e.disconnect(),e.observe(this,{attributes:!0,attributeFilter:["data-passthru","style"]})})}function a(){t('[data-type="gecko/grid-layout-image"]').each(function(){var e=t(this).find(".gecko-grid-layout-editor-styles").attr("style");t(this).attr("style",e)}),t('[data-type="gecko/grid-layout-basic"]').each(function(){var e=t(this).find(".gecko-grid-layout-editor-styles").attr("style");t(this).attr("style",e)}),t('[data-type="gecko/grid-layout-item"]').each(function(){var e=t(this).find(".gecko-grid-layout-editor-styles").attr("style");t(this).attr("style",e)})}function o(){t(".wp-block-gecko-grid-layout-editor").each(function(){var e=t(this).attr("data-passthru");t(this).attr("data-grid");t(this).find(".editor-block-list__layout").attr("style",e)})}t("body").on("DOMNodeInserted",".wp-block-gecko-grid-layout-editor",function(e){t(".wp-block-gecko-grid-layout-editor")&&(o(),a(),r(),n())}),t(window).load(function(){o(),a(),r(),n()})})}]); -
gecko-grid-layout/trunk/dist/public.bundle.js
r2044925 r2046151 1 /******/ (function(modules) { // webpackBootstrap 2 /******/ // The module cache 3 /******/ var installedModules = {}; 4 /******/ 5 /******/ // The require function 6 /******/ function __webpack_require__(moduleId) { 7 /******/ 8 /******/ // Check if module is in cache 9 /******/ if(installedModules[moduleId]) { 10 /******/ return installedModules[moduleId].exports; 11 /******/ } 12 /******/ // Create a new module (and put it into the cache) 13 /******/ var module = installedModules[moduleId] = { 14 /******/ i: moduleId, 15 /******/ l: false, 16 /******/ exports: {} 17 /******/ }; 18 /******/ 19 /******/ // Execute the module function 20 /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 21 /******/ 22 /******/ // Flag the module as loaded 23 /******/ module.l = true; 24 /******/ 25 /******/ // Return the exports of the module 26 /******/ return module.exports; 27 /******/ } 28 /******/ 29 /******/ 30 /******/ // expose the modules object (__webpack_modules__) 31 /******/ __webpack_require__.m = modules; 32 /******/ 33 /******/ // expose the module cache 34 /******/ __webpack_require__.c = installedModules; 35 /******/ 36 /******/ // define getter function for harmony exports 37 /******/ __webpack_require__.d = function(exports, name, getter) { 38 /******/ if(!__webpack_require__.o(exports, name)) { 39 /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); 40 /******/ } 41 /******/ }; 42 /******/ 43 /******/ // define __esModule on exports 44 /******/ __webpack_require__.r = function(exports) { 45 /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 46 /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 47 /******/ } 48 /******/ Object.defineProperty(exports, '__esModule', { value: true }); 49 /******/ }; 50 /******/ 51 /******/ // create a fake namespace object 52 /******/ // mode & 1: value is a module id, require it 53 /******/ // mode & 2: merge all properties of value into the ns 54 /******/ // mode & 4: return value when already ns object 55 /******/ // mode & 8|1: behave like require 56 /******/ __webpack_require__.t = function(value, mode) { 57 /******/ if(mode & 1) value = __webpack_require__(value); 58 /******/ if(mode & 8) return value; 59 /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; 60 /******/ var ns = Object.create(null); 61 /******/ __webpack_require__.r(ns); 62 /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); 63 /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); 64 /******/ return ns; 65 /******/ }; 66 /******/ 67 /******/ // getDefaultExport function for compatibility with non-harmony modules 68 /******/ __webpack_require__.n = function(module) { 69 /******/ var getter = module && module.__esModule ? 70 /******/ function getDefault() { return module['default']; } : 71 /******/ function getModuleExports() { return module; }; 72 /******/ __webpack_require__.d(getter, 'a', getter); 73 /******/ return getter; 74 /******/ }; 75 /******/ 76 /******/ // Object.prototype.hasOwnProperty.call 77 /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 78 /******/ 79 /******/ // __webpack_public_path__ 80 /******/ __webpack_require__.p = "/wp-content/plugins/gecko-grid-layout/dist/"; 81 /******/ 82 /******/ 83 /******/ // Load entry module and return exports 84 /******/ return __webpack_require__(__webpack_require__.s = "./src/public.js"); 85 /******/ }) 86 /************************************************************************/ 87 /******/ ({ 88 89 /***/ "./src/public.js": 90 /*!***********************!*\ 91 !*** ./src/public.js ***! 92 \***********************/ 93 /*! no static exports found */ 94 /***/ (function(module, exports) { 95 96 // https://developers.google.com/web/fundamentals/performance/lazy-loading-guidance/images-and-video/ 97 // IntersectionObserver if supported 98 // document.addEventListener("DOMContentLoaded", function () { 99 // var lazyImages = [].slice.call(document.querySelectorAll("img.lazy")); 100 // if ("IntersectionObserver" in window) { 101 // let lazyImageObserver = new IntersectionObserver(function (entries, observer) { 102 // entries.forEach(function (entry) { 103 // if (entry.isIntersecting) { 104 // let lazyImage = entry.target; 105 // lazyImage.src = lazyImage.dataset.src; 106 // lazyImage.srcset = lazyImage.dataset.srcset; 107 // lazyImage.classList.remove("lazy"); 108 // lazyImageObserver.unobserve(lazyImage); 109 // } 110 // }); 111 // }); 112 // lazyImages.forEach(function (lazyImage) { 113 // lazyImageObserver.observe(lazyImage); 114 // }); 115 // } else { 116 // // Possibly fall back to a more compatible method here 117 // } 118 // }); 119 document.addEventListener("DOMContentLoaded", function () { 120 var lazyImages = [].slice.call(document.querySelectorAll("img.lazy")); 121 var active = false; 122 123 var lazyLoad = function lazyLoad() { 124 if (active === false) { 125 active = true; 126 setTimeout(function () { 127 lazyImages.forEach(function (lazyImage) { 128 if (lazyImage.getBoundingClientRect().top <= window.innerHeight && lazyImage.getBoundingClientRect().bottom >= 0 && getComputedStyle(lazyImage).display !== "none") { 129 lazyImage.src = lazyImage.dataset.src; 130 lazyImage.srcset = lazyImage.dataset.srcset; 131 lazyImage.classList.remove("lazy"); 132 lazyImages = lazyImages.filter(function (image) { 133 return image !== lazyImage; 134 }); 135 136 if (lazyImages.length === 0) { 137 document.removeEventListener("scroll", lazyLoad); 138 window.removeEventListener("resize", lazyLoad); 139 window.removeEventListener("orientationchange", lazyLoad); 140 } 141 } 142 }); 143 active = false; 144 }, 200); 145 } 146 }; 147 148 document.addEventListener("scroll", lazyLoad); 149 window.addEventListener("DOMContentLoaded", lazyLoad); 150 window.addEventListener("resize", lazyLoad); 151 window.addEventListener("orientationchange", lazyLoad); 152 }); 153 154 /***/ }) 155 156 /******/ }); 157 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vc3JjL3B1YmxpYy5qcyJdLCJuYW1lcyI6WyJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJsYXp5SW1hZ2VzIiwic2xpY2UiLCJjYWxsIiwicXVlcnlTZWxlY3RvckFsbCIsImFjdGl2ZSIsImxhenlMb2FkIiwic2V0VGltZW91dCIsImZvckVhY2giLCJsYXp5SW1hZ2UiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ0b3AiLCJ3aW5kb3ciLCJpbm5lckhlaWdodCIsImJvdHRvbSIsImdldENvbXB1dGVkU3R5bGUiLCJkaXNwbGF5Iiwic3JjIiwiZGF0YXNldCIsInNyY3NldCIsImNsYXNzTGlzdCIsInJlbW92ZSIsImZpbHRlciIsImltYWdlIiwibGVuZ3RoIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7O0FBR0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQUEsUUFBUSxDQUFDQyxnQkFBVCxDQUEwQixrQkFBMUIsRUFBOEMsWUFBWTtBQUN6RCxNQUFJQyxVQUFVLEdBQUcsR0FBR0MsS0FBSCxDQUFTQyxJQUFULENBQWNKLFFBQVEsQ0FBQ0ssZ0JBQVQsQ0FBMEIsVUFBMUIsQ0FBZCxDQUFqQjtBQUNBLE1BQUlDLE1BQU0sR0FBRyxLQUFiOztBQUVBLE1BQU1DLFFBQVEsR0FBRyxTQUFYQSxRQUFXLEdBQVk7QUFDNUIsUUFBSUQsTUFBTSxLQUFLLEtBQWYsRUFBc0I7QUFDckJBLFlBQU0sR0FBRyxJQUFUO0FBRUFFLGdCQUFVLENBQUMsWUFBWTtBQUN0Qk4sa0JBQVUsQ0FBQ08sT0FBWCxDQUFtQixVQUFVQyxTQUFWLEVBQXFCO0FBQ3ZDLGNBQUtBLFNBQVMsQ0FBQ0MscUJBQVYsR0FBa0NDLEdBQWxDLElBQXlDQyxNQUFNLENBQUNDLFdBQWhELElBQStESixTQUFTLENBQUNDLHFCQUFWLEdBQWtDSSxNQUFsQyxJQUE0QyxDQUE1RyxJQUFrSEMsZ0JBQWdCLENBQUNOLFNBQUQsQ0FBaEIsQ0FBNEJPLE9BQTVCLEtBQXdDLE1BQTlKLEVBQXNLO0FBQ3JLUCxxQkFBUyxDQUFDUSxHQUFWLEdBQWdCUixTQUFTLENBQUNTLE9BQVYsQ0FBa0JELEdBQWxDO0FBQ0FSLHFCQUFTLENBQUNVLE1BQVYsR0FBbUJWLFNBQVMsQ0FBQ1MsT0FBVixDQUFrQkMsTUFBckM7QUFDQVYscUJBQVMsQ0FBQ1csU0FBVixDQUFvQkMsTUFBcEIsQ0FBMkIsTUFBM0I7QUFFQXBCLHNCQUFVLEdBQUdBLFVBQVUsQ0FBQ3FCLE1BQVgsQ0FBa0IsVUFBVUMsS0FBVixFQUFpQjtBQUMvQyxxQkFBT0EsS0FBSyxLQUFLZCxTQUFqQjtBQUNBLGFBRlksQ0FBYjs7QUFJQSxnQkFBSVIsVUFBVSxDQUFDdUIsTUFBWCxLQUFzQixDQUExQixFQUE2QjtBQUM1QnpCLHNCQUFRLENBQUMwQixtQkFBVCxDQUE2QixRQUE3QixFQUF1Q25CLFFBQXZDO0FBQ0FNLG9CQUFNLENBQUNhLG1CQUFQLENBQTJCLFFBQTNCLEVBQXFDbkIsUUFBckM7QUFDQU0sb0JBQU0sQ0FBQ2EsbUJBQVAsQ0FBMkIsbUJBQTNCLEVBQWdEbkIsUUFBaEQ7QUFDQTtBQUNEO0FBQ0QsU0FoQkQ7QUFrQkFELGNBQU0sR0FBRyxLQUFUO0FBQ0EsT0FwQlMsRUFvQlAsR0FwQk8sQ0FBVjtBQXFCQTtBQUNELEdBMUJEOztBQTRCQU4sVUFBUSxDQUFDQyxnQkFBVCxDQUEwQixRQUExQixFQUFvQ00sUUFBcEM7QUFDQU0sUUFBTSxDQUFDWixnQkFBUCxDQUF3QixrQkFBeEIsRUFBNENNLFFBQTVDO0FBQ0FNLFFBQU0sQ0FBQ1osZ0JBQVAsQ0FBd0IsUUFBeEIsRUFBa0NNLFFBQWxDO0FBQ0FNLFFBQU0sQ0FBQ1osZ0JBQVAsQ0FBd0IsbUJBQXhCLEVBQTZDTSxRQUE3QztBQUNBLENBcENELEUiLCJmaWxlIjoicHVibGljLmJ1bmRsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL3dwLWNvbnRlbnQvcGx1Z2lucy9nZWNrby1ncmlkLWxheW91dC9kaXN0L1wiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9wdWJsaWMuanNcIik7XG4iLCIvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS93ZWIvZnVuZGFtZW50YWxzL3BlcmZvcm1hbmNlL2xhenktbG9hZGluZy1ndWlkYW5jZS9pbWFnZXMtYW5kLXZpZGVvL1xuLy8gSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgaWYgc3VwcG9ydGVkXG4vLyBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG4vLyBcdHZhciBsYXp5SW1hZ2VzID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiaW1nLmxhenlcIikpO1xuXG4vLyBcdGlmIChcIkludGVyc2VjdGlvbk9ic2VydmVyXCIgaW4gd2luZG93KSB7XG4vLyBcdFx0bGV0IGxhenlJbWFnZU9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChlbnRyaWVzLCBvYnNlcnZlcikge1xuLy8gXHRcdFx0ZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSkge1xuLy8gXHRcdFx0XHRpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbi8vIFx0XHRcdFx0XHRsZXQgbGF6eUltYWdlID0gZW50cnkudGFyZ2V0O1xuLy8gXHRcdFx0XHRcdGxhenlJbWFnZS5zcmMgPSBsYXp5SW1hZ2UuZGF0YXNldC5zcmM7XG4vLyBcdFx0XHRcdFx0bGF6eUltYWdlLnNyY3NldCA9IGxhenlJbWFnZS5kYXRhc2V0LnNyY3NldDtcbi8vIFx0XHRcdFx0XHRsYXp5SW1hZ2UuY2xhc3NMaXN0LnJlbW92ZShcImxhenlcIik7XG4vLyBcdFx0XHRcdFx0bGF6eUltYWdlT2JzZXJ2ZXIudW5vYnNlcnZlKGxhenlJbWFnZSk7XG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdH0pO1xuLy8gXHRcdH0pO1xuXG4vLyBcdFx0bGF6eUltYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChsYXp5SW1hZ2UpIHtcbi8vIFx0XHRcdGxhenlJbWFnZU9ic2VydmVyLm9ic2VydmUobGF6eUltYWdlKTtcbi8vIFx0XHR9KTtcbi8vIFx0fSBlbHNlIHtcbi8vIFx0XHQvLyBQb3NzaWJseSBmYWxsIGJhY2sgdG8gYSBtb3JlIGNvbXBhdGlibGUgbWV0aG9kIGhlcmVcbi8vIFx0fVxuLy8gfSk7XG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG5cdGxldCBsYXp5SW1hZ2VzID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiaW1nLmxhenlcIikpO1xuXHRsZXQgYWN0aXZlID0gZmFsc2U7XG5cblx0Y29uc3QgbGF6eUxvYWQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKGFjdGl2ZSA9PT0gZmFsc2UpIHtcblx0XHRcdGFjdGl2ZSA9IHRydWU7XG5cblx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRsYXp5SW1hZ2VzLmZvckVhY2goZnVuY3Rpb24gKGxhenlJbWFnZSkge1xuXHRcdFx0XHRcdGlmICgobGF6eUltYWdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCA8PSB3aW5kb3cuaW5uZXJIZWlnaHQgJiYgbGF6eUltYWdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSA+PSAwKSAmJiBnZXRDb21wdXRlZFN0eWxlKGxhenlJbWFnZSkuZGlzcGxheSAhPT0gXCJub25lXCIpIHtcblx0XHRcdFx0XHRcdGxhenlJbWFnZS5zcmMgPSBsYXp5SW1hZ2UuZGF0YXNldC5zcmM7XG5cdFx0XHRcdFx0XHRsYXp5SW1hZ2Uuc3Jjc2V0ID0gbGF6eUltYWdlLmRhdGFzZXQuc3Jjc2V0O1xuXHRcdFx0XHRcdFx0bGF6eUltYWdlLmNsYXNzTGlzdC5yZW1vdmUoXCJsYXp5XCIpO1xuXG5cdFx0XHRcdFx0XHRsYXp5SW1hZ2VzID0gbGF6eUltYWdlcy5maWx0ZXIoZnVuY3Rpb24gKGltYWdlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBpbWFnZSAhPT0gbGF6eUltYWdlO1xuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdGlmIChsYXp5SW1hZ2VzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIGxhenlMb2FkKTtcblx0XHRcdFx0XHRcdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgbGF6eUxvYWQpO1xuXHRcdFx0XHRcdFx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9yaWVudGF0aW9uY2hhbmdlXCIsIGxhenlMb2FkKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGFjdGl2ZSA9IGZhbHNlO1xuXHRcdFx0fSwgMjAwKTtcblx0XHR9XG5cdH07XG5cblx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBsYXp5TG9hZCk7XG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBsYXp5TG9hZCk7XG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGxhenlMb2FkKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvcmllbnRhdGlvbmNoYW5nZVwiLCBsYXp5TG9hZCk7XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0= 1 !function(n){var o={};function r(e){if(o[e])return o[e].exports;var t=o[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,r),t.l=!0,t.exports}r.m=n,r.c=o,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)r.d(n,o,function(e){return t[e]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/wp-content/plugins/gecko-grid-layout/dist/",r(r.s=18)}({18:function(e,t){document.addEventListener("DOMContentLoaded",function(){var n=[].slice.call(document.querySelectorAll("img.lazy")),t=!1,e=function e(){!1===t&&(t=!0,setTimeout(function(){n.forEach(function(t){t.getBoundingClientRect().top<=window.innerHeight&&0<=t.getBoundingClientRect().bottom&&"none"!==getComputedStyle(t).display&&(t.src=t.dataset.src,t.srcset=t.dataset.srcset,t.classList.remove("lazy"),0===(n=n.filter(function(e){return e!==t})).length&&(document.removeEventListener("scroll",e),window.removeEventListener("resize",e),window.removeEventListener("orientationchange",e)))}),t=!1},200))};document.addEventListener("scroll",e),window.addEventListener("DOMContentLoaded",e),window.addEventListener("resize",e),window.addEventListener("orientationchange",e)})}}); -
gecko-grid-layout/trunk/dist/style.css
r2046091 r2046151 85 85 opacity: 1; 86 86 } 87 88 /*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3R5bGUuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLGFBQWE7RUFDYixvREFBb0Q7RUFDcEQsY0FBYztFQUNkLDRDQUE0QztFQUM1QyxxQkFBcUI7QUFDdkI7QUFDQTtFQUNFLFdBQVc7QUFDYjtBQUNBO0VBQ0U7SUFDRSxrREFBa0Q7SUFDbEQsNENBQTRDO0VBQzlDO0FBQ0Y7QUFDQTtFQUNFO0lBQ0Usa0RBQWtEO0lBQ2xELDRDQUE0QztFQUM5QztBQUNGO0FBQ0E7RUFDRSx1QkFBdUI7RUFDdkIsb0JBQW9CO0FBQ3RCO0FBQ0E7RUFDRTtJQUNFLDRCQUE0QjtFQUM5QjtBQUNGOztBQUVBO0VBQ0Usa0JBQWtCO0VBQ2xCLFVBQVU7QUFDWjs7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixVQUFVO0FBQ1o7O0FBRUE7RUFDRSxrQkFBa0I7RUFDbEIsVUFBVTtFQUNWLGlCQUFpQjtBQUNuQjtBQUNBO0VBQ0Usa0JBQWtCO0VBQ2xCLHVCQUF1QjtFQUN2QixzQkFBc0I7RUFDdEIsb0JBQWlCO0tBQWpCLGlCQUFpQjtFQUNqQiwwQkFBdUI7S0FBdkIsdUJBQXVCO0VBQ3ZCLFdBQVc7QUFDYjtBQUNBO0VBQ0UsYUFBYTtFQUNiLGtCQUFrQjtFQUNsQixvQkFBYTtFQUFiLG9CQUFhO0VBQWIsYUFBYTtFQUNiLDRCQUFzQjtFQUF0Qiw2QkFBc0I7TUFBdEIsMEJBQXNCO1VBQXRCLHNCQUFzQjtFQUN0Qix3QkFBdUI7TUFBdkIscUJBQXVCO1VBQXZCLHVCQUF1QjtFQUN2QixtQkFBbUI7RUFDbkIsWUFBWTtFQUNaLFdBQVc7RUFDWCwyQ0FBMkM7QUFDN0M7QUFDQTtFQUNFLFVBQVU7QUFDWjtBQUNBO0VBQ0UsVUFBVTtFQUNWLHlDQUFpQztFQUFqQyxpQ0FBaUM7QUFDbkM7QUFDQTtFQUNFLFVBQVU7QUFDWixDIiwiZmlsZSI6InN0eWxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dCB7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDEyLCBtaW5tYXgoMXJlbSwgMWZyKSk7XG4gIGdyaWQtZ2FwOiAxcmVtO1xuICBncmlkLWF1dG8tcm93czogbWlubWF4KGNhbGMoMTAwdncvMTIpLCBhdXRvKTtcbiAgZ3JpZC1hdXRvLWZsb3c6IGRlbnNlO1xufVxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LmlzLXN0eWxlLW5vLWdhcCB7XG4gIGdyaWQtZ2FwOiAwO1xufVxuQG1lZGlhIChtYXgtd2lkdGg6IDk2MHB4KSB7XG4gIC53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMHB4LCAxZnIpICFpbXBvcnRhbnQ7XG4gICAgZ3JpZC1hdXRvLXJvd3M6IG1pbm1heCgxcHgsIGF1dG8pICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQge1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDBweCwgMWZyKSAhaW1wb3J0YW50O1xuICAgIGdyaWQtYXV0by1yb3dzOiBtaW5tYXgoMXB4LCBhdXRvKSAhaW1wb3J0YW50O1xuICB9XG59XG4ud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXRfX2l0ZW0ge1xuICBncmlkLWNvbHVtbi1lbmQ6IHNwYW4gNDtcbiAgZ3JpZC1yb3ctZW5kOiBzcGFuIDE7XG59XG5AbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0X19pdGVtIHtcbiAgICBncmlkLWNvbHVtbjogMS8tMSAhaW1wb3J0YW50O1xuICB9XG59XG5cbi5nZWNrby1ncmlkLWxheW91dC1pdGVtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xufVxuXG4uZ2Vja28tZ3JpZC1sYXlvdXQtYmFzaWMge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG59XG5cbi5nZWNrby1ncmlkLWxheW91dC1pbWFnZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgbWluLWhlaWdodDogMjAwcHg7XG59XG4uZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2VfX2ltYWdlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgb2JqZWN0LWZpdDogY292ZXI7XG4gIG9iamVjdC1wb3NpdGlvbjogY2VudGVyO1xuICB6LWluZGV4OiAtMTtcbn1cbi5nZWNrby1ncmlkLWxheW91dC1pbWFnZV9fY2FwdGlvbiB7XG4gIHBhZGRpbmc6IDFyZW07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1pbi1oZWlnaHQ6IGluaGVyaXQ7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSk7XG59XG4uZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2UuaXMtc3R5bGUtbm8tY2FwdGlvbiAuZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2VfX2NhcHRpb24ge1xuICBvcGFjaXR5OiAwO1xufVxuLmdlY2tvLWdyaWQtbGF5b3V0LWltYWdlLmlzLXN0eWxlLWhvdmVyIC5nZWNrby1ncmlkLWxheW91dC1pbWFnZV9fY2FwdGlvbiB7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zaXRpb246IGFsbCAyNTBtcyBlYXNlLWluLW91dDtcbn1cbi5nZWNrby1ncmlkLWxheW91dC1pbWFnZS5pcy1zdHlsZS1ob3Zlcjpob3ZlciAuZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2VfX2NhcHRpb24ge1xuICBvcGFjaXR5OiAxO1xufSJdLCJzb3VyY2VSb290IjoiIn0=*/ -
gecko-grid-layout/trunk/gecko-grid-layout.php
r2046091 r2046151 4 4 * Plugin URI: https://github.com/gecko-designs/gecko-grid-layout 5 5 * Description: Grid Layout block uses CSS grid to create grid layouts in gutenberg. 6 * Version: 1. 0.96 * Version: 1.1.0 7 7 * Author: Gecko Designs 8 8 * Author URI: https://geckodesigns.com -
gecko-grid-layout/trunk/readme.txt
r2046091 r2046151 5 5 Requires at least: 5.0 6 6 Tested up to: 5.1 7 Stable tag: 1. 0.87 Stable tag: 1.1.0 8 8 Requires PHP: 5.6 9 9 License: GPLv2 or later … … 36 36 37 37 == Changelog == 38 = 1.1.0 = 39 * Allow Transform core/columns to grid 40 * Code clean up 38 41 = 1.0.9 = 39 42 * Transforms now move innerblocks … … 67 70 68 71 == Upgrade Notice == 72 = 1.1.0 = 73 * Allow Transform core/columns to grid 74 = 1.0.9 = 75 * Transforms now move innerblocks 69 76 = 1.0.8 = 70 77 * Grid Layout Templates
Note: See TracChangeset
for help on using the changeset viewer.