| 1 |
- {"remainingRequest":"/usr/local/develop/php/www/waibao/project/NN2020060801/addons/admin/node_modules/thread-loader/dist/cjs.js!/usr/local/develop/php/www/waibao/project/NN2020060801/addons/admin/node_modules/babel-loader/lib/index.js!/usr/local/develop/php/www/waibao/project/NN2020060801/addons/admin/node_modules/element-ui/lib/input.js","dependencies":[{"path":"/usr/local/develop/php/www/waibao/project/NN2020060801/addons/admin/node_modules/element-ui/lib/input.js","mtime":499162500000},{"path":"/usr/local/develop/php/www/waibao/project/NN2020060801/addons/admin/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/usr/local/develop/php/www/waibao/project/NN2020060801/addons/admin/node_modules/thread-loader/dist/cjs.js","mtime":499162500000},{"path":"/usr/local/develop/php/www/waibao/project/NN2020060801/addons/admin/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:cmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbCIpOwoKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5kZXNjcmlwdGlvbiIpOwoKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnIik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0Iik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuam9pbiIpOwoKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcCIpOwoKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNsaWNlIik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZSIpOwoKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLmpzb24udG8tc3RyaW5nLXRhZyIpOwoKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLm1hdGgudG8tc3RyaW5nLXRhZyIpOwoKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci5jb25zdHJ1Y3RvciIpOwoKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmciKTsKCnZhciBfdHlwZW9mID0gcmVxdWlyZSgiL3Vzci9sb2NhbC9kZXZlbG9wL3BocC93d3cvd2FpYmFvL3Byb2plY3QvTk4yMDIwMDYwODAxL2FkZG9ucy9hZG1pbi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YiKTsKCm1vZHVsZS5leHBvcnRzID0KLyoqKioqKi8KZnVuY3Rpb24gKG1vZHVsZXMpIHsKICAvLyB3ZWJwYWNrQm9vdHN0cmFwCgogIC8qKioqKiovCiAgLy8gVGhlIG1vZHVsZSBjYWNoZQoKICAvKioqKioqLwogIHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307CiAgLyoqKioqKi8KCiAgLyoqKioqKi8KICAvLyBUaGUgcmVxdWlyZSBmdW5jdGlvbgoKICAvKioqKioqLwoKICBmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7CiAgICAvKioqKioqLwoKICAgIC8qKioqKiovCiAgICAvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGUKCiAgICAvKioqKioqLwogICAgaWYgKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7CiAgICAgIC8qKioqKiovCiAgICAgIHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzOwogICAgICAvKioqKioqLwogICAgfQogICAgLyoqKioqKi8KICAgIC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpCgogICAgLyoqKioqKi8KCgogICAgdmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0gewogICAgICAvKioqKioqLwogICAgICBpOiBtb2R1bGVJZCwKCiAgICAgIC8qKioqKiovCiAgICAgIGw6IGZhbHNlLAoKICAgICAgLyoqKioqKi8KICAgICAgZXhwb3J0czoge30KICAgICAgLyoqKioqKi8KCiAgICB9OwogICAgLyoqKioqKi8KCiAgICAvKioqKioqLwogICAgLy8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uCgogICAgLyoqKioqKi8KCiAgICBtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTsKICAgIC8qKioqKiovCgogICAgLyoqKioqKi8KICAgIC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWQKCiAgICAvKioqKioqLwoKICAgIG1vZHVsZS5sID0gdHJ1ZTsKICAgIC8qKioqKiovCgogICAgLyoqKioqKi8KICAgIC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlCgogICAgLyoqKioqKi8KCiAgICByZXR1cm4gbW9kdWxlLmV4cG9ydHM7CiAgICAvKioqKioqLwogIH0KICAvKioqKioqLwoKICAvKioqKioqLwoKICAvKioqKioqLwogIC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pCgogIC8qKioqKiovCgoKICBfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzOwogIC8qKioqKiovCgogIC8qKioqKiovCiAgLy8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGUKCiAgLyoqKioqKi8KCiAgX193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlczsKICAvKioqKioqLwoKICAvKioqKioqLwogIC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0cwoKICAvKioqKioqLwoKICBfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbiAoZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7CiAgICAvKioqKioqLwogICAgaWYgKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHsKICAgICAgLyoqKioqKi8KICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGdldDogZ2V0dGVyCiAgICAgIH0pOwogICAgICAvKioqKioqLwogICAgfQogICAgLyoqKioqKi8KCiAgfTsKICAvKioqKioqLwoKICAvKioqKioqLwogIC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHMKCiAgLyoqKioqKi8KCgogIF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAvKioqKioqLwogICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykgewogICAgICAvKioqKioqLwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7CiAgICAgICAgdmFsdWU6ICdNb2R1bGUnCiAgICAgIH0pOwogICAgICAvKioqKioqLwogICAgfQogICAgLyoqKioqKi8KCgogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgewogICAgICB2YWx1ZTogdHJ1ZQogICAgfSk7CiAgICAvKioqKioqLwogIH07CiAgLyoqKioqKi8KCiAgLyoqKioqKi8KICAvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3QKCiAgLyoqKioqKi8KICAvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXQKCiAgLyoqKioqKi8KICAvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnMKCiAgLyoqKioqKi8KICAvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3QKCiAgLyoqKioqKi8KICAvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlCgogIC8qKioqKiovCgoKICBfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbiAodmFsdWUsIG1vZGUpIHsKICAgIC8qKioqKiovCiAgICBpZiAobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7CiAgICAvKioqKioqLwoKICAgIGlmIChtb2RlICYgOCkgcmV0dXJuIHZhbHVlOwogICAgLyoqKioqKi8KCiAgICBpZiAobW9kZSAmIDQgJiYgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTsKICAgIC8qKioqKiovCgogICAgdmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgIC8qKioqKiovCgogICAgX193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTsKICAgIC8qKioqKiovCgoKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7CiAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgIHZhbHVlOiB2YWx1ZQogICAgfSk7CiAgICAvKioqKioqLwoKICAgIGlmIChtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvciAodmFyIGtleSBpbiB2YWx1ZSkgewogICAgICBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24gKGtleSkgewogICAgICAgIHJldHVybiB2YWx1ZVtrZXldOwogICAgICB9LmJpbmQobnVsbCwga2V5KSk7CiAgICB9CiAgICAvKioqKioqLwoKICAgIHJldHVybiBuczsKICAgIC8qKioqKiovCiAgfTsKICAvKioqKioqLwoKICAvKioqKioqLwogIC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzCgogIC8qKioqKiovCgoKICBfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbiAobW9kdWxlKSB7CiAgICAvKioqKioqLwogICAgdmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/CiAgICAvKioqKioqLwogICAgZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsKICAgICAgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOwogICAgfSA6CiAgICAvKioqKioqLwogICAgZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsKICAgICAgcmV0dXJuIG1vZHVsZTsKICAgIH07CiAgICAvKioqKioqLwoKICAgIF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTsKICAgIC8qKioqKiovCgoKICAgIHJldHVybiBnZXR0ZXI7CiAgICAvKioqKioqLwogIH07CiAgLyoqKioqKi8KCiAgLyoqKioqKi8KICAvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwKCiAgLyoqKioqKi8KCgogIF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uIChvYmplY3QsIHByb3BlcnR5KSB7CiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOwogIH07CiAgLyoqKioqKi8KCiAgLyoqKioqKi8KICAvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfXwoKICAvKioqKioqLwoKCiAgX193ZWJwYWNrX3JlcXVpcmVfXy5wID0gIi9kaXN0LyI7CiAgLyoqKioqKi8KCiAgLyoqKioqKi8KCiAgLyoqKioqKi8KICAvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHMKCiAgLyoqKioqKi8KCiAgcmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNzYpOwogIC8qKioqKiovCn0oCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKioqKioqLwp7CiAgLyoqKi8KICAwOgogIC8qKiovCiAgZnVuY3Rpb24gXyhtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIC8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLwoKICAgIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYSIsIGZ1bmN0aW9uICgpIHsKICAgICAgcmV0dXJuIG5vcm1hbGl6ZUNvbXBvbmVudDsKICAgIH0pOwogICAgLyogZ2xvYmFscyBfX1ZVRV9TU1JfQ09OVEVYVF9fICovCiAgICAvLyBJTVBPUlRBTlQ6IERvIE5PVCB1c2UgRVMyMDE1IGZlYXR1cmVzIGluIHRoaXMgZmlsZSAoZXhjZXB0IGZvciBtb2R1bGVzKS4KICAgIC8vIFRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsCiAgICAvLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZS4KCgogICAgZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50KHNjcmlwdEV4cG9ydHMsIHJlbmRlciwgc3RhdGljUmVuZGVyRm5zLCBmdW5jdGlvbmFsVGVtcGxhdGUsIGluamVjdFN0eWxlcywgc2NvcGVJZCwgbW9kdWxlSWRlbnRpZmllciwKICAgIC8qIHNlcnZlciBvbmx5ICovCiAgICBzaGFkb3dNb2RlCiAgICAvKiB2dWUtY2xpIG9ubHkgKi8KICAgICkgewogICAgICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wCiAgICAgIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbicgPyBzY3JpcHRFeHBvcnRzLm9wdGlvbnMgOiBzY3JpcHRFeHBvcnRzOyAvLyByZW5kZXIgZnVuY3Rpb25zCgogICAgICBpZiAocmVuZGVyKSB7CiAgICAgICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXI7CiAgICAgICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnM7CiAgICAgICAgb3B0aW9ucy5fY29tcGlsZWQgPSB0cnVlOwogICAgICB9IC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGUKCgogICAgICBpZiAoZnVuY3Rpb25hbFRlbXBsYXRlKSB7CiAgICAgICAgb3B0aW9ucy5mdW5jdGlvbmFsID0gdHJ1ZTsKICAgICAgfSAvLyBzY29wZWRJZAoKCiAgICAgIGlmIChzY29wZUlkKSB7CiAgICAgICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWQ7CiAgICAgIH0KCiAgICAgIHZhciBob29rOwoKICAgICAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHsKICAgICAgICAvLyBzZXJ2ZXIgYnVpbGQKICAgICAgICBob29rID0gZnVuY3Rpb24gaG9vayhjb250ZXh0KSB7CiAgICAgICAgICAvLyAyLjMgaW5qZWN0aW9uCiAgICAgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbAogICAgICAgICAgdGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCB8fCAvLyBzdGF0ZWZ1bAogICAgICAgICAgdGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuJHZub2RlICYmIHRoaXMucGFyZW50LiR2bm9kZS5zc3JDb250ZXh0OyAvLyBmdW5jdGlvbmFsCiAgICAgICAgICAvLyAyLjIgd2l0aCBydW5Jbk5ld0NvbnRleHQ6IHRydWUKCiAgICAgICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fOwogICAgICAgICAgfSAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlcwoKCiAgICAgICAgICBpZiAoaW5qZWN0U3R5bGVzKSB7CiAgICAgICAgICAgIGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIGNvbnRleHQpOwogICAgICAgICAgfSAvLyByZWdpc3RlciBjb21wb25lbnQgbW9kdWxlIGlkZW50aWZpZXIgZm9yIGFzeW5jIGNodW5rIGluZmVycmVuY2UKCgogICAgICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHsKICAgICAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpOwogICAgICAgICAgfQogICAgICAgIH07IC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlCiAgICAgICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWQKCgogICAgICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9vazsKICAgICAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHsKICAgICAgICBob29rID0gc2hhZG93TW9kZSA/IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIHRoaXMuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdCk7CiAgICAgICAgfSA6IGluamVjdFN0eWxlczsKICAgICAgfQoKICAgICAgaWYgKGhvb2spIHsKICAgICAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7CiAgICAgICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndAogICAgICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplcgogICAgICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9vazsgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9hbCBjb21wb25lbnQgaW4gdnVlIGZpbGUKCiAgICAgICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlcjsKCiAgICAgICAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcldpdGhTdHlsZUluamVjdGlvbihoLCBjb250ZXh0KSB7CiAgICAgICAgICAgIGhvb2suY2FsbChjb250ZXh0KTsKICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpOwogICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCByZWdpc3RyYXRpb24gYXMgYmVmb3JlQ3JlYXRlIGhvb2sKICAgICAgICAgIHZhciBleGlzdGluZyA9IG9wdGlvbnMuYmVmb3JlQ3JlYXRlOwogICAgICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZyA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaykgOiBbaG9va107CiAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gewogICAgICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsCiAgICAgICAgb3B0aW9uczogb3B0aW9ucwogICAgICB9OwogICAgfQogICAgLyoqKi8KCiAgfSwKCiAgLyoqKi8KICAxMToKICAvKioqLwogIGZ1bmN0aW9uIF8obW9kdWxlLCBleHBvcnRzKSB7CiAgICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoImVsZW1lbnQtdWkvbGliL21peGlucy9taWdyYXRpbmciKTsKICAgIC8qKiovCiAgfSwKCiAgLyoqKi8KICAyMToKICAvKioqLwogIGZ1bmN0aW9uIF8obW9kdWxlLCBleHBvcnRzKSB7CiAgICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoImVsZW1lbnQtdWkvbGliL3V0aWxzL3NoYXJlZCIpOwogICAgLyoqKi8KICB9LAoKICAvKioqLwogIDQ6CiAgLyoqKi8KICBmdW5jdGlvbiBfKG1vZHVsZSwgZXhwb3J0cykgewogICAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZW1pdHRlciIpOwogICAgLyoqKi8KICB9LAoKICAvKioqLwogIDc2OgogIC8qKiovCiAgZnVuY3Rpb24gXyhtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICBfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7IC8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvaW5wdXQvc3JjL2lucHV0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNDNkZDc3NCYKCgogICAgdmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHsKICAgICAgdmFyIF92bSA9IHRoaXM7CgogICAgICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnQ7CgogICAgICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2g7CgogICAgICByZXR1cm4gX2MoImRpdiIsIHsKICAgICAgICBjbGFzczogW192bS50eXBlID09PSAidGV4dGFyZWEiID8gImVsLXRleHRhcmVhIiA6ICJlbC1pbnB1dCIsIF92bS5pbnB1dFNpemUgPyAiZWwtaW5wdXQtLSIgKyBfdm0uaW5wdXRTaXplIDogIiIsIHsKICAgICAgICAgICJpcy1kaXNhYmxlZCI6IF92bS5pbnB1dERpc2FibGVkLAogICAgICAgICAgImlzLWV4Y2VlZCI6IF92bS5pbnB1dEV4Y2VlZCwKICAgICAgICAgICJlbC1pbnB1dC1ncm91cCI6IF92bS4kc2xvdHMucHJlcGVuZCB8fCBfdm0uJHNsb3RzLmFwcGVuZCwKICAgICAgICAgICJlbC1pbnB1dC1ncm91cC0tYXBwZW5kIjogX3ZtLiRzbG90cy5hcHBlbmQsCiAgICAgICAgICAiZWwtaW5wdXQtZ3JvdXAtLXByZXBlbmQiOiBfdm0uJHNsb3RzLnByZXBlbmQsCiAgICAgICAgICAiZWwtaW5wdXQtLXByZWZpeCI6IF92bS4kc2xvdHMucHJlZml4IHx8IF92bS5wcmVmaXhJY29uLAogICAgICAgICAgImVsLWlucHV0LS1zdWZmaXgiOiBfdm0uJHNsb3RzLnN1ZmZpeCB8fCBfdm0uc3VmZml4SWNvbiB8fCBfdm0uY2xlYXJhYmxlIHx8IF92bS5zaG93UGFzc3dvcmQKICAgICAgICB9XSwKICAgICAgICBvbjogewogICAgICAgICAgbW91c2VlbnRlcjogZnVuY3Rpb24gbW91c2VlbnRlcigkZXZlbnQpIHsKICAgICAgICAgICAgX3ZtLmhvdmVyaW5nID0gdHJ1ZTsKICAgICAgICAgIH0sCiAgICAgICAgICBtb3VzZWxlYXZlOiBmdW5jdGlvbiBtb3VzZWxlYXZlKCRldmVudCkgewogICAgICAgICAgICBfdm0uaG92ZXJpbmcgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sIFtfdm0udHlwZSAhPT0gInRleHRhcmVhIiA/IFtfdm0uJHNsb3RzLnByZXBlbmQgPyBfYygiZGl2IiwgewogICAgICAgIHN0YXRpY0NsYXNzOiAiZWwtaW5wdXQtZ3JvdXBfX3ByZXBlbmQiCiAgICAgIH0sIFtfdm0uX3QoInByZXBlbmQiKV0sIDIpIDogX3ZtLl9lKCksIF92bS50eXBlICE9PSAidGV4dGFyZWEiID8gX2MoImlucHV0IiwgX3ZtLl9iKHsKICAgICAgICByZWY6ICJpbnB1dCIsCiAgICAgICAgc3RhdGljQ2xhc3M6ICJlbC1pbnB1dF9faW5uZXIiLAogICAgICAgIGF0dHJzOiB7CiAgICAgICAgICB0YWJpbmRleDogX3ZtLnRhYmluZGV4LAogICAgICAgICAgdHlwZTogX3ZtLnNob3dQYXNzd29yZCA/IF92bS5wYXNzd29yZFZpc2libGUgPyAidGV4dCIgOiAicGFzc3dvcmQiIDogX3ZtLnR5cGUsCiAgICAgICAgICBkaXNhYmxlZDogX3ZtLmlucHV0RGlzYWJsZWQsCiAgICAgICAgICByZWFkb25seTogX3ZtLnJlYWRvbmx5LAogICAgICAgICAgYXV0b2NvbXBsZXRlOiBfdm0uYXV0b0NvbXBsZXRlIHx8IF92bS5hdXRvY29tcGxldGUsCiAgICAgICAgICAiYXJpYS1sYWJlbCI6IF92bS5sYWJlbAogICAgICAgIH0sCiAgICAgICAgb246IHsKICAgICAgICAgIGNvbXBvc2l0aW9uc3RhcnQ6IF92bS5oYW5kbGVDb21wb3NpdGlvblN0YXJ0LAogICAgICAgICAgY29tcG9zaXRpb251cGRhdGU6IF92bS5oYW5kbGVDb21wb3NpdGlvblVwZGF0ZSwKICAgICAgICAgIGNvbXBvc2l0aW9uZW5kOiBfdm0uaGFuZGxlQ29tcG9zaXRpb25FbmQsCiAgICAgICAgICBpbnB1dDogX3ZtLmhhbmRsZUlucHV0LAogICAgICAgICAgZm9jdXM6IF92bS5oYW5kbGVGb2N1cywKICAgICAgICAgIGJsdXI6IF92bS5oYW5kbGVCbHVyLAogICAgICAgICAgY2hhbmdlOiBfdm0uaGFuZGxlQ2hhbmdlCiAgICAgICAgfQogICAgICB9LCAiaW5wdXQiLCBfdm0uJGF0dHJzLCBmYWxzZSkpIDogX3ZtLl9lKCksIF92bS4kc2xvdHMucHJlZml4IHx8IF92bS5wcmVmaXhJY29uID8gX2MoInNwYW4iLCB7CiAgICAgICAgc3RhdGljQ2xhc3M6ICJlbC1pbnB1dF9fcHJlZml4IgogICAgICB9LCBbX3ZtLl90KCJwcmVmaXgiKSwgX3ZtLnByZWZpeEljb24gPyBfYygiaSIsIHsKICAgICAgICBzdGF0aWNDbGFzczogImVsLWlucHV0X19pY29uIiwKICAgICAgICBjbGFzczogX3ZtLnByZWZpeEljb24KICAgICAgfSkgOiBfdm0uX2UoKV0sIDIpIDogX3ZtLl9lKCksIF92bS5nZXRTdWZmaXhWaXNpYmxlKCkgPyBfYygic3BhbiIsIHsKICAgICAgICBzdGF0aWNDbGFzczogImVsLWlucHV0X19zdWZmaXgiCiAgICAgIH0sIFtfYygic3BhbiIsIHsKICAgICAgICBzdGF0aWNDbGFzczogImVsLWlucHV0X19zdWZmaXgtaW5uZXIiCiAgICAgIH0sIFshX3ZtLnNob3dDbGVhciB8fCAhX3ZtLnNob3dQd2RWaXNpYmxlIHx8ICFfdm0uaXNXb3JkTGltaXRWaXNpYmxlID8gW192bS5fdCgic3VmZml4IiksIF92bS5zdWZmaXhJY29uID8gX2MoImkiLCB7CiAgICAgICAgc3RhdGljQ2xhc3M6ICJlbC1pbnB1dF9faWNvbiIsCiAgICAgICAgY2xhc3M6IF92bS5zdWZmaXhJY29uCiAgICAgIH0pIDogX3ZtLl9lKCldIDogX3ZtLl9lKCksIF92bS5zaG93Q2xlYXIgPyBfYygiaSIsIHsKICAgICAgICBzdGF0aWNDbGFzczogImVsLWlucHV0X19pY29uIGVsLWljb24tY2lyY2xlLWNsb3NlIGVsLWlucHV0X19jbGVhciIsCiAgICAgICAgb246IHsKICAgICAgICAgIG1vdXNlZG93bjogZnVuY3Rpb24gbW91c2Vkb3duKCRldmVudCkgewogICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBjbGljazogX3ZtLmNsZWFyCiAgICAgICAgfQogICAgICB9KSA6IF92bS5fZSgpLCBfdm0uc2hvd1B3ZFZpc2libGUgPyBfYygiaSIsIHsKICAgICAgICBzdGF0aWNDbGFzczogImVsLWlucHV0X19pY29uIGVsLWljb24tdmlldyBlbC1pbnB1dF9fY2xlYXIiLAogICAgICAgIG9uOiB7CiAgICAgICAgICBjbGljazogX3ZtLmhhbmRsZVBhc3N3b3JkVmlzaWJsZQogICAgICAgIH0KICAgICAgfSkgOiBfdm0uX2UoKSwgX3ZtLmlzV29yZExpbWl0VmlzaWJsZSA/IF9jKCJzcGFuIiwgewogICAgICAgIHN0YXRpY0NsYXNzOiAiZWwtaW5wdXRfX2NvdW50IgogICAgICB9LCBbX2MoInNwYW4iLCB7CiAgICAgICAgc3RhdGljQ2xhc3M6ICJlbC1pbnB1dF9fY291bnQtaW5uZXIiCiAgICAgIH0sIFtfdm0uX3YoIlxuICAgICAgICAgICAgIiArIF92bS5fcyhfdm0udGV4dExlbmd0aCkgKyAiLyIgKyBfdm0uX3MoX3ZtLnVwcGVyTGltaXQpICsgIlxuICAgICAgICAgICIpXSldKSA6IF92bS5fZSgpXSwgMiksIF92bS52YWxpZGF0ZVN0YXRlID8gX2MoImkiLCB7CiAgICAgICAgc3RhdGljQ2xhc3M6ICJlbC1pbnB1dF9faWNvbiIsCiAgICAgICAgY2xhc3M6IFsiZWwtaW5wdXRfX3ZhbGlkYXRlSWNvbiIsIF92bS52YWxpZGF0ZUljb25dCiAgICAgIH0pIDogX3ZtLl9lKCldKSA6IF92bS5fZSgpLCBfdm0uJHNsb3RzLmFwcGVuZCA/IF9jKCJkaXYiLCB7CiAgICAgICAgc3RhdGljQ2xhc3M6ICJlbC1pbnB1dC1ncm91cF9fYXBwZW5kIgogICAgICB9LCBbX3ZtLl90KCJhcHBlbmQiKV0sIDIpIDogX3ZtLl9lKCldIDogX2MoInRleHRhcmVhIiwgX3ZtLl9iKHsKICAgICAgICByZWY6ICJ0ZXh0YXJlYSIsCiAgICAgICAgc3RhdGljQ2xhc3M6ICJlbC10ZXh0YXJlYV9faW5uZXIiLAogICAgICAgIHN0eWxlOiBfdm0udGV4dGFyZWFTdHlsZSwKICAgICAgICBhdHRyczogewogICAgICAgICAgdGFiaW5kZXg6IF92bS50YWJpbmRleCwKICAgICAgICAgIGRpc2FibGVkOiBfdm0uaW5wdXREaXNhYmxlZCwKICAgICAgICAgIHJlYWRvbmx5OiBfdm0ucmVhZG9ubHksCiAgICAgICAgICBhdXRvY29tcGxldGU6IF92bS5hdXRvQ29tcGxldGUgfHwgX3ZtLmF1dG9jb21wbGV0ZSwKICAgICAgICAgICJhcmlhLWxhYmVsIjogX3ZtLmxhYmVsCiAgICAgICAgfSwKICAgICAgICBvbjogewogICAgICAgICAgY29tcG9zaXRpb25zdGFydDogX3ZtLmhhbmRsZUNvbXBvc2l0aW9uU3RhcnQsCiAgICAgICAgICBjb21wb3NpdGlvbnVwZGF0ZTogX3ZtLmhhbmRsZUNvbXBvc2l0aW9uVXBkYXRlLAogICAgICAgICAgY29tcG9zaXRpb25lbmQ6IF92bS5oYW5kbGVDb21wb3NpdGlvbkVuZCwKICAgICAgICAgIGlucHV0OiBfdm0uaGFuZGxlSW5wdXQsCiAgICAgICAgICBmb2N1czogX3ZtLmhhbmRsZUZvY3VzLAogICAgICAgICAgYmx1cjogX3ZtLmhhbmRsZUJsdXIsCiAgICAgICAgICBjaGFuZ2U6IF92bS5oYW5kbGVDaGFuZ2UKICAgICAgICB9CiAgICAgIH0sICJ0ZXh0YXJlYSIsIF92bS4kYXR0cnMsIGZhbHNlKSksIF92bS5pc1dvcmRMaW1pdFZpc2libGUgJiYgX3ZtLnR5cGUgPT09ICJ0ZXh0YXJlYSIgPyBfYygic3BhbiIsIHsKICAgICAgICBzdGF0aWNDbGFzczogImVsLWlucHV0X19jb3VudCIKICAgICAgfSwgW192bS5fdihfdm0uX3MoX3ZtLnRleHRMZW5ndGgpICsgIi8iICsgX3ZtLl9zKF92bS51cHBlckxpbWl0KSldKSA6IF92bS5fZSgpXSwgMik7CiAgICB9OwoKICAgIHZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXTsKICAgIHJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZTsgLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbnB1dC9zcmMvaW5wdXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM0M2RkNzc0JgogICAgLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCAiZWxlbWVudC11aS9saWIvbWl4aW5zL2VtaXR0ZXIiCgogICAgdmFyIGVtaXR0ZXJfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKCiAgICB2YXIgZW1pdHRlcl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihlbWl0dGVyXyk7IC8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgImVsZW1lbnQtdWkvbGliL21peGlucy9taWdyYXRpbmciCgoKICAgIHZhciBtaWdyYXRpbmdfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7CgogICAgdmFyIG1pZ3JhdGluZ19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihtaWdyYXRpbmdfKTsgLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbnB1dC9zcmMvY2FsY1RleHRhcmVhSGVpZ2h0LmpzCgoKICAgIHZhciBoaWRkZW5UZXh0YXJlYSA9IHZvaWQgMDsKICAgIHZhciBISURERU5fU1RZTEUgPSAnXG4gIGhlaWdodDowICFpbXBvcnRhbnQ7XG4gIHZpc2liaWxpdHk6aGlkZGVuICFpbXBvcnRhbnQ7XG4gIG92ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50O1xuICBwb3NpdGlvbjphYnNvbHV0ZSAhaW1wb3J0YW50O1xuICB6LWluZGV4Oi0xMDAwICFpbXBvcnRhbnQ7XG4gIHRvcDowICFpbXBvcnRhbnQ7XG4gIHJpZ2h0OjAgIWltcG9ydGFudFxuJzsKICAgIHZhciBDT05URVhUX1NUWUxFID0gWydsZXR0ZXItc3BhY2luZycsICdsaW5lLWhlaWdodCcsICdwYWRkaW5nLXRvcCcsICdwYWRkaW5nLWJvdHRvbScsICdmb250LWZhbWlseScsICdmb250LXdlaWdodCcsICdmb250LXNpemUnLCAndGV4dC1yZW5kZXJpbmcnLCAndGV4dC10cmFuc2Zvcm0nLCAnd2lkdGgnLCAndGV4dC1pbmRlbnQnLCAncGFkZGluZy1sZWZ0JywgJ3BhZGRpbmctcmlnaHQnLCAnYm9yZGVyLXdpZHRoJywgJ2JveC1zaXppbmcnXTsKCiAgICBmdW5jdGlvbiBjYWxjdWxhdGVOb2RlU3R5bGluZyh0YXJnZXRFbGVtZW50KSB7CiAgICAgIHZhciBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRhcmdldEVsZW1lbnQpOwogICAgICB2YXIgYm94U2l6aW5nID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnYm94LXNpemluZycpOwogICAgICB2YXIgcGFkZGluZ1NpemUgPSBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctYm90dG9tJykpICsgcGFyc2VGbG9hdChzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdwYWRkaW5nLXRvcCcpKTsKICAgICAgdmFyIGJvcmRlclNpemUgPSBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci1ib3R0b20td2lkdGgnKSkgKyBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci10b3Atd2lkdGgnKSk7CiAgICAgIHZhciBjb250ZXh0U3R5bGUgPSBDT05URVhUX1NUWUxFLm1hcChmdW5jdGlvbiAobmFtZSkgewogICAgICAgIHJldHVybiBuYW1lICsgJzonICsgc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTsKICAgICAgfSkuam9pbignOycpOwogICAgICByZXR1cm4gewogICAgICAgIGNvbnRleHRTdHlsZTogY29udGV4dFN0eWxlLAogICAgICAgIHBhZGRpbmdTaXplOiBwYWRkaW5nU2l6ZSwKICAgICAgICBib3JkZXJTaXplOiBib3JkZXJTaXplLAogICAgICAgIGJveFNpemluZzogYm94U2l6aW5nCiAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gY2FsY1RleHRhcmVhSGVpZ2h0KHRhcmdldEVsZW1lbnQpIHsKICAgICAgdmFyIG1pblJvd3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDE7CiAgICAgIHZhciBtYXhSb3dzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsOwoKICAgICAgaWYgKCFoaWRkZW5UZXh0YXJlYSkgewogICAgICAgIGhpZGRlblRleHRhcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTsKICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhpZGRlblRleHRhcmVhKTsKICAgICAgfQoKICAgICAgdmFyIF9jYWxjdWxhdGVOb2RlU3R5bGluZyA9IGNhbGN1bGF0ZU5vZGVTdHlsaW5nKHRhcmdldEVsZW1lbnQpLAogICAgICAgICAgcGFkZGluZ1NpemUgPSBfY2FsY3VsYXRlTm9kZVN0eWxpbmcucGFkZGluZ1NpemUsCiAgICAgICAgICBib3JkZXJTaXplID0gX2NhbGN1bGF0ZU5vZGVTdHlsaW5nLmJvcmRlclNpemUsCiAgICAgICAgICBib3hTaXppbmcgPSBfY2FsY3VsYXRlTm9kZVN0eWxpbmcuYm94U2l6aW5nLAogICAgICAgICAgY29udGV4dFN0eWxlID0gX2NhbGN1bGF0ZU5vZGVTdHlsaW5nLmNvbnRleHRTdHlsZTsKCiAgICAgIGhpZGRlblRleHRhcmVhLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBjb250ZXh0U3R5bGUgKyAnOycgKyBISURERU5fU1RZTEUpOwogICAgICBoaWRkZW5UZXh0YXJlYS52YWx1ZSA9IHRhcmdldEVsZW1lbnQudmFsdWUgfHwgdGFyZ2V0RWxlbWVudC5wbGFjZWhvbGRlciB8fCAnJzsKICAgICAgdmFyIGhlaWdodCA9IGhpZGRlblRleHRhcmVhLnNjcm9sbEhlaWdodDsKICAgICAgdmFyIHJlc3VsdCA9IHt9OwoKICAgICAgaWYgKGJveFNpemluZyA9PT0gJ2JvcmRlci1ib3gnKSB7CiAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0ICsgYm9yZGVyU2l6ZTsKICAgICAgfSBlbHNlIGlmIChib3hTaXppbmcgPT09ICdjb250ZW50LWJveCcpIHsKICAgICAgICBoZWlnaHQgPSBoZWlnaHQgLSBwYWRkaW5nU2l6ZTsKICAgICAgfQoKICAgICAgaGlkZGVuVGV4dGFyZWEudmFsdWUgPSAnJzsKICAgICAgdmFyIHNpbmdsZVJvd0hlaWdodCA9IGhpZGRlblRleHRhcmVhLnNjcm9sbEhlaWdodCAtIHBhZGRpbmdTaXplOwoKICAgICAgaWYgKG1pblJvd3MgIT09IG51bGwpIHsKICAgICAgICB2YXIgbWluSGVpZ2h0ID0gc2luZ2xlUm93SGVpZ2h0ICogbWluUm93czsKCiAgICAgICAgaWYgKGJveFNpemluZyA9PT0gJ2JvcmRlci1ib3gnKSB7CiAgICAgICAgICBtaW5IZWlnaHQgPSBtaW5IZWlnaHQgKyBwYWRkaW5nU2l6ZSArIGJvcmRlclNpemU7CiAgICAgICAgfQoKICAgICAgICBoZWlnaHQgPSBNYXRoLm1heChtaW5IZWlnaHQsIGhlaWdodCk7CiAgICAgICAgcmVzdWx0Lm1pbkhlaWdodCA9IG1pbkhlaWdodCArICdweCc7CiAgICAgIH0KCiAgICAgIGlmIChtYXhSb3dzICE9PSBudWxsKSB7CiAgICAgICAgdmFyIG1heEhlaWdodCA9IHNpbmdsZVJvd0hlaWdodCAqIG1heFJvd3M7CgogICAgICAgIGlmIChib3hTaXppbmcgPT09ICdib3JkZXItYm94JykgewogICAgICAgICAgbWF4SGVpZ2h0ID0gbWF4SGVpZ2h0ICsgcGFkZGluZ1NpemUgKyBib3JkZXJTaXplOwogICAgICAgIH0KCiAgICAgICAgaGVpZ2h0ID0gTWF0aC5taW4obWF4SGVpZ2h0LCBoZWlnaHQpOwogICAgICB9CgogICAgICByZXN1bHQuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JzsKICAgICAgaGlkZGVuVGV4dGFyZWEucGFyZW50Tm9kZSAmJiBoaWRkZW5UZXh0YXJlYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGhpZGRlblRleHRhcmVhKTsKICAgICAgaGlkZGVuVGV4dGFyZWEgPSBudWxsOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIDsgLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCAiZWxlbWVudC11aS9saWIvdXRpbHMvbWVyZ2UiCgogICAgdmFyIG1lcmdlXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7CgogICAgdmFyIG1lcmdlX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKG1lcmdlXyk7IC8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgImVsZW1lbnQtdWkvbGliL3V0aWxzL3NoYXJlZCIKCgogICAgdmFyIHNoYXJlZF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTsgLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvaW5wdXQvc3JjL2lucHV0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCgogICAgLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLwoKCiAgICB2YXIgaW5wdXR2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSB7CiAgICAgIG5hbWU6ICdFbElucHV0JywKICAgICAgY29tcG9uZW50TmFtZTogJ0VsSW5wdXQnLAogICAgICBtaXhpbnM6IFtlbWl0dGVyX2RlZmF1bHQuYSwgbWlncmF0aW5nX2RlZmF1bHQuYV0sCiAgICAgIGluaGVyaXRBdHRyczogZmFsc2UsCiAgICAgIGluamVjdDogewogICAgICAgIGVsRm9ybTogewogICAgICAgICAgZGVmYXVsdDogJycKICAgICAgICB9LAogICAgICAgIGVsRm9ybUl0ZW06IHsKICAgICAgICAgIGRlZmF1bHQ6ICcnCiAgICAgICAgfQogICAgICB9LAogICAgICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICB0ZXh0YXJlYUNhbGNTdHlsZToge30sCiAgICAgICAgICBob3ZlcmluZzogZmFsc2UsCiAgICAgICAgICBmb2N1c2VkOiBmYWxzZSwKICAgICAgICAgIGlzQ29tcG9zaW5nOiBmYWxzZSwKICAgICAgICAgIHBhc3N3b3JkVmlzaWJsZTogZmFsc2UKICAgICAgICB9OwogICAgICB9LAogICAgICBwcm9wczogewogICAgICAgIHZhbHVlOiBbU3RyaW5nLCBOdW1iZXJdLAogICAgICAgIHNpemU6IFN0cmluZywKICAgICAgICByZXNpemU6IFN0cmluZywKICAgICAgICBmb3JtOiBTdHJpbmcsCiAgICAgICAgZGlzYWJsZWQ6IEJvb2xlYW4sCiAgICAgICAgcmVhZG9ubHk6IEJvb2xlYW4sCiAgICAgICAgdHlwZTogewogICAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgICAgZGVmYXVsdDogJ3RleHQnCiAgICAgICAgfSwKICAgICAgICBhdXRvc2l6ZTogewogICAgICAgICAgdHlwZTogW0Jvb2xlYW4sIE9iamVjdF0sCiAgICAgICAgICBkZWZhdWx0OiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgYXV0b2NvbXBsZXRlOiB7CiAgICAgICAgICB0eXBlOiBTdHJpbmcsCiAgICAgICAgICBkZWZhdWx0OiAnb2ZmJwogICAgICAgIH0sCgogICAgICAgIC8qKiBARGVwcmVjYXRlZCBpbiBuZXh0IG1ham9yIHZlcnNpb24gKi8KICAgICAgICBhdXRvQ29tcGxldGU6IHsKICAgICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCkgewogICAgICAgICAgICBmYWxzZSAmJiBmYWxzZTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB2YWxpZGF0ZUV2ZW50OiB7CiAgICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgICAgZGVmYXVsdDogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgc3VmZml4SWNvbjogU3RyaW5nLAogICAgICAgIHByZWZpeEljb246IFN0cmluZywKICAgICAgICBsYWJlbDogU3RyaW5nLAogICAgICAgIGNsZWFyYWJsZTogewogICAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICBzaG93UGFzc3dvcmQ6IHsKICAgICAgICAgIHR5cGU6IEJvb2xlYW4sCiAgICAgICAgICBkZWZhdWx0OiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgc2hvd1dvcmRMaW1pdDogewogICAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICB0YWJpbmRleDogU3RyaW5nCiAgICAgIH0sCiAgICAgIGNvbXB1dGVkOiB7CiAgICAgICAgX2VsRm9ybUl0ZW1TaXplOiBmdW5jdGlvbiBfZWxGb3JtSXRlbVNpemUoKSB7CiAgICAgICAgICByZXR1cm4gKHRoaXMuZWxGb3JtSXRlbSB8fCB7fSkuZWxGb3JtSXRlbVNpemU7CiAgICAgICAgfSwKICAgICAgICB2YWxpZGF0ZVN0YXRlOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXRlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuZWxGb3JtSXRlbSA/IHRoaXMuZWxGb3JtSXRlbS52YWxpZGF0ZVN0YXRlIDogJyc7CiAgICAgICAgfSwKICAgICAgICBuZWVkU3RhdHVzSWNvbjogZnVuY3Rpb24gbmVlZFN0YXR1c0ljb24oKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5lbEZvcm0gPyB0aGlzLmVsRm9ybS5zdGF0dXNJY29uIDogZmFsc2U7CiAgICAgICAgfSwKICAgICAgICB2YWxpZGF0ZUljb246IGZ1bmN0aW9uIHZhbGlkYXRlSWNvbigpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHZhbGlkYXRpbmc6ICdlbC1pY29uLWxvYWRpbmcnLAogICAgICAgICAgICBzdWNjZXNzOiAnZWwtaWNvbi1jaXJjbGUtY2hlY2snLAogICAgICAgICAgICBlcnJvcjogJ2VsLWljb24tY2lyY2xlLWNsb3NlJwogICAgICAgICAgfVt0aGlzLnZhbGlkYXRlU3RhdGVdOwogICAgICAgIH0sCiAgICAgICAgdGV4dGFyZWFTdHlsZTogZnVuY3Rpb24gdGV4dGFyZWFTdHlsZSgpIHsKICAgICAgICAgIHJldHVybiBtZXJnZV9kZWZhdWx0KCkoe30sIHRoaXMudGV4dGFyZWFDYWxjU3R5bGUsIHsKICAgICAgICAgICAgcmVzaXplOiB0aGlzLnJlc2l6ZQogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBpbnB1dFNpemU6IGZ1bmN0aW9uIGlucHV0U2l6ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnNpemUgfHwgdGhpcy5fZWxGb3JtSXRlbVNpemUgfHwgKHRoaXMuJEVMRU1FTlQgfHwge30pLnNpemU7CiAgICAgICAgfSwKICAgICAgICBpbnB1dERpc2FibGVkOiBmdW5jdGlvbiBpbnB1dERpc2FibGVkKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgKHRoaXMuZWxGb3JtIHx8IHt9KS5kaXNhYmxlZDsKICAgICAgICB9LAogICAgICAgIG5hdGl2ZUlucHV0VmFsdWU6IGZ1bmN0aW9uIG5hdGl2ZUlucHV0VmFsdWUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSA9PT0gbnVsbCB8fCB0aGlzLnZhbHVlID09PSB1bmRlZmluZWQgPyAnJyA6IFN0cmluZyh0aGlzLnZhbHVlKTsKICAgICAgICB9LAogICAgICAgIHNob3dDbGVhcjogZnVuY3Rpb24gc2hvd0NsZWFyKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYXJhYmxlICYmICF0aGlzLmlucHV0RGlzYWJsZWQgJiYgIXRoaXMucmVhZG9ubHkgJiYgdGhpcy5uYXRpdmVJbnB1dFZhbHVlICYmICh0aGlzLmZvY3VzZWQgfHwgdGhpcy5ob3ZlcmluZyk7CiAgICAgICAgfSwKICAgICAgICBzaG93UHdkVmlzaWJsZTogZnVuY3Rpb24gc2hvd1B3ZFZpc2libGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5zaG93UGFzc3dvcmQgJiYgIXRoaXMuaW5wdXREaXNhYmxlZCAmJiAhdGhpcy5yZWFkb25seSAmJiAoISF0aGlzLm5hdGl2ZUlucHV0VmFsdWUgfHwgdGhpcy5mb2N1c2VkKTsKICAgICAgICB9LAogICAgICAgIGlzV29yZExpbWl0VmlzaWJsZTogZnVuY3Rpb24gaXNXb3JkTGltaXRWaXNpYmxlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuc2hvd1dvcmRMaW1pdCAmJiB0aGlzLiRhdHRycy5tYXhsZW5ndGggJiYgKHRoaXMudHlwZSA9PT0gJ3RleHQnIHx8IHRoaXMudHlwZSA9PT0gJ3RleHRhcmVhJykgJiYgIXRoaXMuaW5wdXREaXNhYmxlZCAmJiAhdGhpcy5yZWFkb25seSAmJiAhdGhpcy5zaG93UGFzc3dvcmQ7CiAgICAgICAgfSwKICAgICAgICB1cHBlckxpbWl0OiBmdW5jdGlvbiB1cHBlckxpbWl0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuJGF0dHJzLm1heGxlbmd0aDsKICAgICAgICB9LAogICAgICAgIHRleHRMZW5ndGg6IGZ1bmN0aW9uIHRleHRMZW5ndGgoKSB7CiAgICAgICAgICBpZiAodHlwZW9mIHRoaXMudmFsdWUgPT09ICdudW1iZXInKSB7CiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGhpcy52YWx1ZSkubGVuZ3RoOwogICAgICAgICAgfQoKICAgICAgICAgIHJldHVybiAodGhpcy52YWx1ZSB8fCAnJykubGVuZ3RoOwogICAgICAgIH0sCiAgICAgICAgaW5wdXRFeGNlZWQ6IGZ1bmN0aW9uIGlucHV0RXhjZWVkKCkgewogICAgICAgICAgLy8gc2hvdyBleGNlZWQgc3R5bGUgaWYgbGVuZ3RoIG9mIGluaXRpYWwgdmFsdWUgZ3JlYXRlciB0aGVuIG1heGxlbmd0aAogICAgICAgICAgcmV0dXJuIHRoaXMuaXNXb3JkTGltaXRWaXNpYmxlICYmIHRoaXMudGV4dExlbmd0aCA+IHRoaXMudXBwZXJMaW1pdDsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHdhdGNoOiB7CiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHZhbCkgewogICAgICAgICAgdGhpcy4kbmV4dFRpY2sodGhpcy5yZXNpemVUZXh0YXJlYSk7CgogICAgICAgICAgaWYgKHRoaXMudmFsaWRhdGVFdmVudCkgewogICAgICAgICAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywgJ2VsLmZvcm0uY2hhbmdlJywgW3ZhbF0pOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgLy8gbmF0aXZlIGlucHV0IHZhbHVlIGlzIHNldCBleHBsaWNpdGx5CiAgICAgICAgLy8gZG8gbm90IHVzZSB2LW1vZGVsIC8gOnZhbHVlIGluIHRlbXBsYXRlCiAgICAgICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L2lzc3Vlcy8xNDUyMQogICAgICAgIG5hdGl2ZUlucHV0VmFsdWU6IGZ1bmN0aW9uIG5hdGl2ZUlucHV0VmFsdWUoKSB7CiAgICAgICAgICB0aGlzLnNldE5hdGl2ZUlucHV0VmFsdWUoKTsKICAgICAgICB9LAogICAgICAgIC8vIHdoZW4gY2hhbmdlIGJldHdlZW4gPGlucHV0PiBhbmQgPHRleHRhcmVhPiwKICAgICAgICAvLyB1cGRhdGUgRE9NIGRlcGVuZGVudCB2YWx1ZSBhbmQgc3R5bGVzCiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9pc3N1ZXMvMTQ4NTcKICAgICAgICB0eXBlOiBmdW5jdGlvbiB0eXBlKCkgewogICAgICAgICAgdmFyIF90aGlzID0gdGhpczsKCiAgICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIF90aGlzLnNldE5hdGl2ZUlucHV0VmFsdWUoKTsKCiAgICAgICAgICAgIF90aGlzLnJlc2l6ZVRleHRhcmVhKCk7CgogICAgICAgICAgICBfdGhpcy51cGRhdGVJY29uT2Zmc2V0KCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG1ldGhvZHM6IHsKICAgICAgICBmb2N1czogZnVuY3Rpb24gZm9jdXMoKSB7CiAgICAgICAgICB0aGlzLmdldElucHV0KCkuZm9jdXMoKTsKICAgICAgICB9LAogICAgICAgIGJsdXI6IGZ1bmN0aW9uIGJsdXIoKSB7CiAgICAgICAgICB0aGlzLmdldElucHV0KCkuYmx1cigpOwogICAgICAgIH0sCiAgICAgICAgZ2V0TWlncmF0aW5nQ29uZmlnOiBmdW5jdGlvbiBnZXRNaWdyYXRpbmdDb25maWcoKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBwcm9wczogewogICAgICAgICAgICAgICdpY29uJzogJ2ljb24gaXMgcmVtb3ZlZCwgdXNlIHN1ZmZpeC1pY29uIC8gcHJlZml4LWljb24gaW5zdGVhZC4nLAogICAgICAgICAgICAgICdvbi1pY29uLWNsaWNrJzogJ29uLWljb24tY2xpY2sgaXMgcmVtb3ZlZC4nCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGV2ZW50czogewogICAgICAgICAgICAgICdjbGljayc6ICdjbGljayBpcyByZW1vdmVkLicKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIGhhbmRsZUJsdXI6IGZ1bmN0aW9uIGhhbmRsZUJsdXIoZXZlbnQpIHsKICAgICAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlOwogICAgICAgICAgdGhpcy4kZW1pdCgnYmx1cicsIGV2ZW50KTsKCiAgICAgICAgICBpZiAodGhpcy52YWxpZGF0ZUV2ZW50KSB7CiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsRm9ybUl0ZW0nLCAnZWwuZm9ybS5ibHVyJywgW3RoaXMudmFsdWVdKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHNlbGVjdDogZnVuY3Rpb24gc2VsZWN0KCkgewogICAgICAgICAgdGhpcy5nZXRJbnB1dCgpLnNlbGVjdCgpOwogICAgICAgIH0sCiAgICAgICAgcmVzaXplVGV4dGFyZWE6IGZ1bmN0aW9uIHJlc2l6ZVRleHRhcmVhKCkgewogICAgICAgICAgaWYgKHRoaXMuJGlzU2VydmVyKSByZXR1cm47CiAgICAgICAgICB2YXIgYXV0b3NpemUgPSB0aGlzLmF1dG9zaXplLAogICAgICAgICAgICAgIHR5cGUgPSB0aGlzLnR5cGU7CiAgICAgICAgICBpZiAodHlwZSAhPT0gJ3RleHRhcmVhJykgcmV0dXJuOwoKICAgICAgICAgIGlmICghYXV0b3NpemUpIHsKICAgICAgICAgICAgdGhpcy50ZXh0YXJlYUNhbGNTdHlsZSA9IHsKICAgICAgICAgICAgICBtaW5IZWlnaHQ6IGNhbGNUZXh0YXJlYUhlaWdodCh0aGlzLiRyZWZzLnRleHRhcmVhKS5taW5IZWlnaHQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIHZhciBtaW5Sb3dzID0gYXV0b3NpemUubWluUm93czsKICAgICAgICAgIHZhciBtYXhSb3dzID0gYXV0b3NpemUubWF4Um93czsKICAgICAgICAgIHRoaXMudGV4dGFyZWFDYWxjU3R5bGUgPSBjYWxjVGV4dGFyZWFIZWlnaHQodGhpcy4kcmVmcy50ZXh0YXJlYSwgbWluUm93cywgbWF4Um93cyk7CiAgICAgICAgfSwKICAgICAgICBzZXROYXRpdmVJbnB1dFZhbHVlOiBmdW5jdGlvbiBzZXROYXRpdmVJbnB1dFZhbHVlKCkgewogICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5nZXRJbnB1dCgpOwogICAgICAgICAgaWYgKCFpbnB1dCkgcmV0dXJuOwogICAgICAgICAgaWYgKGlucHV0LnZhbHVlID09PSB0aGlzLm5hdGl2ZUlucHV0VmFsdWUpIHJldHVybjsKICAgICAgICAgIGlucHV0LnZhbHVlID0gdGhpcy5uYXRpdmVJbnB1dFZhbHVlOwogICAgICAgIH0sCiAgICAgICAgaGFuZGxlRm9jdXM6IGZ1bmN0aW9uIGhhbmRsZUZvY3VzKGV2ZW50KSB7CiAgICAgICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlOwogICAgICAgICAgdGhpcy4kZW1pdCgnZm9jdXMnLCBldmVudCk7CiAgICAgICAgfSwKICAgICAgICBoYW5kbGVDb21wb3NpdGlvblN0YXJ0OiBmdW5jdGlvbiBoYW5kbGVDb21wb3NpdGlvblN0YXJ0KCkgewogICAgICAgICAgdGhpcy5pc0NvbXBvc2luZyA9IHRydWU7CiAgICAgICAgfSwKICAgICAgICBoYW5kbGVDb21wb3NpdGlvblVwZGF0ZTogZnVuY3Rpb24gaGFuZGxlQ29tcG9zaXRpb25VcGRhdGUoZXZlbnQpIHsKICAgICAgICAgIHZhciB0ZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlOwogICAgICAgICAgdmFyIGxhc3RDaGFyYWN0ZXIgPSB0ZXh0W3RleHQubGVuZ3RoIC0gMV0gfHwgJyc7CiAgICAgICAgICB0aGlzLmlzQ29tcG9zaW5nID0gIU9iamVjdChzaGFyZWRfWyJpc0tvcmVhbiJdKShsYXN0Q2hhcmFjdGVyKTsKICAgICAgICB9LAogICAgICAgIGhhbmRsZUNvbXBvc2l0aW9uRW5kOiBmdW5jdGlvbiBoYW5kbGVDb21wb3NpdGlvbkVuZChldmVudCkgewogICAgICAgICAgaWYgKHRoaXMuaXNDb21wb3NpbmcpIHsKICAgICAgICAgICAgdGhpcy5pc0NvbXBvc2luZyA9IGZhbHNlOwogICAgICAgICAgICB0aGlzLmhhbmRsZUlucHV0KGV2ZW50KTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGhhbmRsZUlucHV0OiBmdW5jdGlvbiBoYW5kbGVJbnB1dChldmVudCkgewogICAgICAgICAgLy8gc2hvdWxkIG5vdCBlbWl0IGlucHV0IGR1cmluZyBjb21wb3NpdGlvbgogICAgICAgICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L2lzc3Vlcy8xMDUxNgogICAgICAgICAgaWYgKHRoaXMuaXNDb21wb3NpbmcpIHJldHVybjsgLy8gaGFjayBmb3IgaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9pc3N1ZXMvODU0OAogICAgICAgICAgLy8gc2hvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgd2hlbiB3ZSBkb24ndCBzdXBwb3J0IElFCgogICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSA9PT0gdGhpcy5uYXRpdmVJbnB1dFZhbHVlKSByZXR1cm47CiAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGV2ZW50LnRhcmdldC52YWx1ZSk7IC8vIGVuc3VyZSBuYXRpdmUgaW5wdXQgdmFsdWUgaXMgY29udHJvbGxlZAogICAgICAgICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L2lzc3Vlcy8xMjg1MAoKICAgICAgICAgIHRoaXMuJG5leHRUaWNrKHRoaXMuc2V0TmF0aXZlSW5wdXRWYWx1ZSk7CiAgICAgICAgfSwKICAgICAgICBoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShldmVudCkgewogICAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgZXZlbnQudGFyZ2V0LnZhbHVlKTsKICAgICAgICB9LAogICAgICAgIGNhbGNJY29uT2Zmc2V0OiBmdW5jdGlvbiBjYWxjSWNvbk9mZnNldChwbGFjZSkgewogICAgICAgICAgdmFyIGVsTGlzdCA9IFtdLnNsaWNlLmNhbGwodGhpcy4kZWwucXVlcnlTZWxlY3RvckFsbCgnLmVsLWlucHV0X18nICsgcGxhY2UpIHx8IFtdKTsKICAgICAgICAgIGlmICghZWxMaXN0Lmxlbmd0aCkgcmV0dXJuOwogICAgICAgICAgdmFyIGVsID0gbnVsbDsKCiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsTGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoZWxMaXN0W2ldLnBhcmVudE5vZGUgPT09IHRoaXMuJGVsKSB7CiAgICAgICAgICAgICAgZWwgPSBlbExpc3RbaV07CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoIWVsKSByZXR1cm47CiAgICAgICAgICB2YXIgcGVuZGFudE1hcCA9IHsKICAgICAgICAgICAgc3VmZml4OiAnYXBwZW5kJywKICAgICAgICAgICAgcHJlZml4OiAncHJlcGVuZCcKICAgICAgICAgIH07CiAgICAgICAgICB2YXIgcGVuZGFudCA9IHBlbmRhbnRNYXBbcGxhY2VdOwoKICAgICAgICAgIGlmICh0aGlzLiRzbG90c1twZW5kYW50XSkgewogICAgICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWCgnICsgKHBsYWNlID09PSAnc3VmZml4JyA/ICctJyA6ICcnKSArIHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1pbnB1dC1ncm91cF9fJyArIHBlbmRhbnQpLm9mZnNldFdpZHRoICsgJ3B4KSc7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB1cGRhdGVJY29uT2Zmc2V0OiBmdW5jdGlvbiB1cGRhdGVJY29uT2Zmc2V0KCkgewogICAgICAgICAgdGhpcy5jYWxjSWNvbk9mZnNldCgncHJlZml4Jyk7CiAgICAgICAgICB0aGlzLmNhbGNJY29uT2Zmc2V0KCdzdWZmaXgnKTsKICAgICAgICB9LAogICAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHsKICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgJycpOwogICAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgJycpOwogICAgICAgICAgdGhpcy4kZW1pdCgnY2xlYXInKTsKICAgICAgICB9LAogICAgICAgIGhhbmRsZVBhc3N3b3JkVmlzaWJsZTogZnVuY3Rpb24gaGFuZGxlUGFzc3dvcmRWaXNpYmxlKCkgewogICAgICAgICAgdGhpcy5wYXNzd29yZFZpc2libGUgPSAhdGhpcy5wYXNzd29yZFZpc2libGU7CiAgICAgICAgICB0aGlzLmZvY3VzKCk7CiAgICAgICAgfSwKICAgICAgICBnZXRJbnB1dDogZnVuY3Rpb24gZ2V0SW5wdXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4kcmVmcy5pbnB1dCB8fCB0aGlzLiRyZWZzLnRleHRhcmVhOwogICAgICAgIH0sCiAgICAgICAgZ2V0U3VmZml4VmlzaWJsZTogZnVuY3Rpb24gZ2V0U3VmZml4VmlzaWJsZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiRzbG90cy5zdWZmaXggfHwgdGhpcy5zdWZmaXhJY29uIHx8IHRoaXMuc2hvd0NsZWFyIHx8IHRoaXMuc2hvd1Bhc3N3b3JkIHx8IHRoaXMuaXNXb3JkTGltaXRWaXNpYmxlIHx8IHRoaXMudmFsaWRhdGVTdGF0ZSAmJiB0aGlzLm5lZWRTdGF0dXNJY29uOwogICAgICAgIH0KICAgICAgfSwKICAgICAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHsKICAgICAgICB0aGlzLiRvbignaW5wdXRTZWxlY3QnLCB0aGlzLnNlbGVjdCk7CiAgICAgIH0sCiAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7CiAgICAgICAgdGhpcy5zZXROYXRpdmVJbnB1dFZhbHVlKCk7CiAgICAgICAgdGhpcy5yZXNpemVUZXh0YXJlYSgpOwogICAgICAgIHRoaXMudXBkYXRlSWNvbk9mZnNldCgpOwogICAgICB9LAogICAgICB1cGRhdGVkOiBmdW5jdGlvbiB1cGRhdGVkKCkgewogICAgICAgIHRoaXMuJG5leHRUaWNrKHRoaXMudXBkYXRlSWNvbk9mZnNldCk7CiAgICAgIH0KICAgIH07IC8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW5wdXQvc3JjL2lucHV0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKCiAgICAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovCgogICAgdmFyIHNyY19pbnB1dHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IGlucHV0dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOyAvLyBFWFRFUk5BTCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcwoKICAgIHZhciBjb21wb25lbnROb3JtYWxpemVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTsgLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbnB1dC9zcmMvaW5wdXQudnVlCgogICAgLyogbm9ybWFsaXplIGNvbXBvbmVudCAqLwoKCiAgICB2YXIgY29tcG9uZW50ID0gT2JqZWN0KGNvbXBvbmVudE5vcm1hbGl6ZXJbImEiCiAgICAvKiBkZWZhdWx0ICovCiAgICBdKShzcmNfaW5wdXR2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sIHJlbmRlciwgc3RhdGljUmVuZGVyRm5zLCBmYWxzZSwgbnVsbCwgbnVsbCwgbnVsbCk7CiAgICAvKiBob3QgcmVsb2FkICovCgogICAgaWYgKGZhbHNlKSB7CiAgICAgIHZhciBhcGk7CiAgICB9CgogICAgY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gInBhY2thZ2VzL2lucHV0L3NyYy9pbnB1dC52dWUiOwogICAgLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLwoKICAgIHZhciBpbnB1dCA9IGNvbXBvbmVudC5leHBvcnRzOyAvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2lucHV0L2luZGV4LmpzCgogICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KCiAgICBpbnB1dC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkgewogICAgICBWdWUuY29tcG9uZW50KGlucHV0Lm5hbWUsIGlucHV0KTsKICAgIH07CiAgICAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovCgoKICAgIHZhciBwYWNrYWdlc19pbnB1dCA9IF9fd2VicGFja19leHBvcnRzX19bImRlZmF1bHQiXSA9IGlucHV0OwogICAgLyoqKi8KICB9LAoKICAvKioqLwogIDk6CiAgLyoqKi8KICBmdW5jdGlvbiBfKG1vZHVsZSwgZXhwb3J0cykgewogICAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCJlbGVtZW50LXVpL2xpYi91dGlscy9tZXJnZSIpOwogICAgLyoqKi8KICB9CiAgLyoqKioqKi8KCn0pOw=="},null]}
|