a63d61f4322a9c5e3343f02b3909eabe.json 32 KB

1
  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-number.js","dependencies":[{"path":"/usr/local/develop/php/www/waibao/project/NN2020060801/addons/admin/node_modules/element-ui/lib/input-number.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:cmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbCIpOwoKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5kZXNjcmlwdGlvbiIpOwoKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnIik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0Iik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5kZXgtb2YiKTsKCnJlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lIik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnIik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMubWF0aC50by1zdHJpbmctdGFnIik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLmNvbnN0cnVjdG9yIik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLnRvLWZpeGVkIik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZyIpOwoKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50by1zdHJpbmciKTsKCnZhciBfdHlwZW9mID0gcmVxdWlyZSgiL3Vzci9sb2NhbC9kZXZlbG9wL3BocC93d3cvd2FpYmFvL3Byb2plY3QvTk4yMDIwMDYwODAxL2FkZG9ucy9hZG1pbi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YiKTsKCm1vZHVsZS5leHBvcnRzID0KLyoqKioqKi8KZnVuY3Rpb24gKG1vZHVsZXMpIHsKICAvLyB3ZWJwYWNrQm9vdHN0cmFwCgogIC8qKioqKiovCiAgLy8gVGhlIG1vZHVsZSBjYWNoZQoKICAvKioqKioqLwogIHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307CiAgLyoqKioqKi8KCiAgLyoqKioqKi8KICAvLyBUaGUgcmVxdWlyZSBmdW5jdGlvbgoKICAvKioqKioqLwoKICBmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7CiAgICAvKioqKioqLwoKICAgIC8qKioqKiovCiAgICAvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGUKCiAgICAvKioqKioqLwogICAgaWYgKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7CiAgICAgIC8qKioqKiovCiAgICAgIHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzOwogICAgICAvKioqKioqLwogICAgfQogICAgLyoqKioqKi8KICAgIC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpCgogICAgLyoqKioqKi8KCgogICAgdmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0gewogICAgICAvKioqKioqLwogICAgICBpOiBtb2R1bGVJZCwKCiAgICAgIC8qKioqKiovCiAgICAgIGw6IGZhbHNlLAoKICAgICAgLyoqKioqKi8KICAgICAgZXhwb3J0czoge30KICAgICAgLyoqKioqKi8KCiAgICB9OwogICAgLyoqKioqKi8KCiAgICAvKioqKioqLwogICAgLy8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uCgogICAgLyoqKioqKi8KCiAgICBtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTsKICAgIC8qKioqKiovCgogICAgLyoqKioqKi8KICAgIC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWQKCiAgICAvKioqKioqLwoKICAgIG1vZHVsZS5sID0gdHJ1ZTsKICAgIC8qKioqKiovCgogICAgLyoqKioqKi8KICAgIC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlCgogICAgLyoqKioqKi8KCiAgICByZXR1cm4gbW9kdWxlLmV4cG9ydHM7CiAgICAvKioqKioqLwogIH0KICAvKioqKioqLwoKICAvKioqKioqLwoKICAvKioqKioqLwogIC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pCgogIC8qKioqKiovCgoKICBfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzOwogIC8qKioqKiovCgogIC8qKioqKiovCiAgLy8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGUKCiAgLyoqKioqKi8KCiAgX193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlczsKICAvKioqKioqLwoKICAvKioqKioqLwogIC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0cwoKICAvKioqKioqLwoKICBfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbiAoZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7CiAgICAvKioqKioqLwogICAgaWYgKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHsKICAgICAgLyoqKioqKi8KICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGdldDogZ2V0dGVyCiAgICAgIH0pOwogICAgICAvKioqKioqLwogICAgfQogICAgLyoqKioqKi8KCiAgfTsKICAvKioqKioqLwoKICAvKioqKioqLwogIC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHMKCiAgLyoqKioqKi8KCgogIF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAvKioqKioqLwogICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykgewogICAgICAvKioqKioqLwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7CiAgICAgICAgdmFsdWU6ICdNb2R1bGUnCiAgICAgIH0pOwogICAgICAvKioqKioqLwogICAgfQogICAgLyoqKioqKi8KCgogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgewogICAgICB2YWx1ZTogdHJ1ZQogICAgfSk7CiAgICAvKioqKioqLwogIH07CiAgLyoqKioqKi8KCiAgLyoqKioqKi8KICAvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3QKCiAgLyoqKioqKi8KICAvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXQKCiAgLyoqKioqKi8KICAvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnMKCiAgLyoqKioqKi8KICAvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3QKCiAgLyoqKioqKi8KICAvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlCgogIC8qKioqKiovCgoKICBfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbiAodmFsdWUsIG1vZGUpIHsKICAgIC8qKioqKiovCiAgICBpZiAobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7CiAgICAvKioqKioqLwoKICAgIGlmIChtb2RlICYgOCkgcmV0dXJuIHZhbHVlOwogICAgLyoqKioqKi8KCiAgICBpZiAobW9kZSAmIDQgJiYgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTsKICAgIC8qKioqKiovCgogICAgdmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgIC8qKioqKiovCgogICAgX193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTsKICAgIC8qKioqKiovCgoKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7CiAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgIHZhbHVlOiB2YWx1ZQogICAgfSk7CiAgICAvKioqKioqLwoKICAgIGlmIChtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvciAodmFyIGtleSBpbiB2YWx1ZSkgewogICAgICBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24gKGtleSkgewogICAgICAgIHJldHVybiB2YWx1ZVtrZXldOwogICAgICB9LmJpbmQobnVsbCwga2V5KSk7CiAgICB9CiAgICAvKioqKioqLwoKICAgIHJldHVybiBuczsKICAgIC8qKioqKiovCiAgfTsKICAvKioqKioqLwoKICAvKioqKioqLwogIC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzCgogIC8qKioqKiovCgoKICBfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbiAobW9kdWxlKSB7CiAgICAvKioqKioqLwogICAgdmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/CiAgICAvKioqKioqLwogICAgZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsKICAgICAgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOwogICAgfSA6CiAgICAvKioqKioqLwogICAgZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsKICAgICAgcmV0dXJuIG1vZHVsZTsKICAgIH07CiAgICAvKioqKioqLwoKICAgIF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTsKICAgIC8qKioqKiovCgoKICAgIHJldHVybiBnZXR0ZXI7CiAgICAvKioqKioqLwogIH07CiAgLyoqKioqKi8KCiAgLyoqKioqKi8KICAvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwKCiAgLyoqKioqKi8KCgogIF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uIChvYmplY3QsIHByb3BlcnR5KSB7CiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOwogIH07CiAgLyoqKioqKi8KCiAgLyoqKioqKi8KICAvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfXwoKICAvKioqKioqLwoKCiAgX193ZWJwYWNrX3JlcXVpcmVfXy5wID0gIi9kaXN0LyI7CiAgLyoqKioqKi8KCiAgLyoqKioqKi8KCiAgLyoqKioqKi8KICAvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHMKCiAgLyoqKioqKi8KCiAgcmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTE0KTsKICAvKioqKioqLwp9KAovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoqKioqKi8KewogIC8qKiovCiAgMDoKICAvKioqLwogIGZ1bmN0aW9uIF8obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICAvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8KCiAgICBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImEiLCBmdW5jdGlvbiAoKSB7CiAgICAgIHJldHVybiBub3JtYWxpemVDb21wb25lbnQ7CiAgICB9KTsKICAgIC8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqLwogICAgLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuCiAgICAvLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbAogICAgLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuCgoKICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudChzY3JpcHRFeHBvcnRzLCByZW5kZXIsIHN0YXRpY1JlbmRlckZucywgZnVuY3Rpb25hbFRlbXBsYXRlLCBpbmplY3RTdHlsZXMsIHNjb3BlSWQsIG1vZHVsZUlkZW50aWZpZXIsCiAgICAvKiBzZXJ2ZXIgb25seSAqLwogICAgc2hhZG93TW9kZQogICAgLyogdnVlLWNsaSBvbmx5ICovCiAgICApIHsKICAgICAgLy8gVnVlLmV4dGVuZCBjb25zdHJ1Y3RvciBleHBvcnQgaW50ZXJvcAogICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zIDogc2NyaXB0RXhwb3J0czsgLy8gcmVuZGVyIGZ1bmN0aW9ucwoKICAgICAgaWYgKHJlbmRlcikgewogICAgICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyOwogICAgICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gc3RhdGljUmVuZGVyRm5zOwogICAgICAgIG9wdGlvbnMuX2NvbXBpbGVkID0gdHJ1ZTsKICAgICAgfSAvLyBmdW5jdGlvbmFsIHRlbXBsYXRlCgoKICAgICAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkgewogICAgICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWU7CiAgICAgIH0gLy8gc2NvcGVkSWQKCgogICAgICBpZiAoc2NvcGVJZCkgewogICAgICAgIG9wdGlvbnMuX3Njb3BlSWQgPSAnZGF0YS12LScgKyBzY29wZUlkOwogICAgICB9CgogICAgICB2YXIgaG9vazsKCiAgICAgIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7CiAgICAgICAgLy8gc2VydmVyIGJ1aWxkCiAgICAgICAgaG9vayA9IGZ1bmN0aW9uIGhvb2soY29udGV4dCkgewogICAgICAgICAgLy8gMi4zIGluamVjdGlvbgogICAgICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGwKICAgICAgICAgIHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQgfHwgLy8gc3RhdGVmdWwKICAgICAgICAgIHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dDsgLy8gZnVuY3Rpb25hbAogICAgICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlCgogICAgICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfXzsKICAgICAgICAgIH0gLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXMKCgogICAgICAgICAgaWYgKGluamVjdFN0eWxlcykgewogICAgICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KTsKICAgICAgICAgIH0gLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlCgoKICAgICAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzKSB7CiAgICAgICAgICAgIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChtb2R1bGVJZGVudGlmaWVyKTsKICAgICAgICAgIH0KICAgICAgICB9OyAvLyB1c2VkIGJ5IHNzciBpbiBjYXNlIGNvbXBvbmVudCBpcyBjYWNoZWQgYW5kIGJlZm9yZUNyZWF0ZQogICAgICAgIC8vIG5ldmVyIGdldHMgY2FsbGVkCgoKICAgICAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2s7CiAgICAgIH0gZWxzZSBpZiAoaW5qZWN0U3R5bGVzKSB7CiAgICAgICAgaG9vayA9IHNoYWRvd01vZGUgPyBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCB0aGlzLiRyb290LiRvcHRpb25zLnNoYWRvd1Jvb3QpOwogICAgICAgIH0gOiBpbmplY3RTdHlsZXM7CiAgICAgIH0KCiAgICAgIGlmIChob29rKSB7CiAgICAgICAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkgewogICAgICAgICAgLy8gZm9yIHRlbXBsYXRlLW9ubHkgaG90LXJlbG9hZCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgcmVuZGVyIGZuIGRvZXNuJ3QKICAgICAgICAgIC8vIGdvIHRocm91Z2ggdGhlIG5vcm1hbGl6ZXIKICAgICAgICAgIG9wdGlvbnMuX2luamVjdFN0eWxlcyA9IGhvb2s7IC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlCgogICAgICAgICAgdmFyIG9yaWdpbmFsUmVuZGVyID0gb3B0aW9ucy5yZW5kZXI7CgogICAgICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24oaCwgY29udGV4dCkgewogICAgICAgICAgICBob29rLmNhbGwoY29udGV4dCk7CiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KTsKICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rCiAgICAgICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZTsKICAgICAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmcgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spIDogW2hvb2tdOwogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuIHsKICAgICAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLAogICAgICAgIG9wdGlvbnM6IG9wdGlvbnMKICAgICAgfTsKICAgIH0KICAgIC8qKiovCgogIH0sCgogIC8qKiovCiAgMTA6CiAgLyoqKi8KICBmdW5jdGlvbiBfKG1vZHVsZSwgZXhwb3J0cykgewogICAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCJlbGVtZW50LXVpL2xpYi9pbnB1dCIpOwogICAgLyoqKi8KICB9LAoKICAvKioqLwogIDExNDoKICAvKioqLwogIGZ1bmN0aW9uIF8obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOyAvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2lucHV0LW51bWJlci9zcmMvaW5wdXQtbnVtYmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00MmY4Y2Y2NiYKCgogICAgdmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHsKICAgICAgdmFyIF92bSA9IHRoaXM7CgogICAgICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnQ7CgogICAgICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2g7CgogICAgICByZXR1cm4gX2MoImRpdiIsIHsKICAgICAgICBjbGFzczogWyJlbC1pbnB1dC1udW1iZXIiLCBfdm0uaW5wdXROdW1iZXJTaXplID8gImVsLWlucHV0LW51bWJlci0tIiArIF92bS5pbnB1dE51bWJlclNpemUgOiAiIiwgewogICAgICAgICAgImlzLWRpc2FibGVkIjogX3ZtLmlucHV0TnVtYmVyRGlzYWJsZWQKICAgICAgICB9LCB7CiAgICAgICAgICAiaXMtd2l0aG91dC1jb250cm9scyI6ICFfdm0uY29udHJvbHMKICAgICAgICB9LCB7CiAgICAgICAgICAiaXMtY29udHJvbHMtcmlnaHQiOiBfdm0uY29udHJvbHNBdFJpZ2h0CiAgICAgICAgfV0sCiAgICAgICAgb246IHsKICAgICAgICAgIGRyYWdzdGFydDogZnVuY3Rpb24gZHJhZ3N0YXJ0KCRldmVudCkgewogICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sIFtfdm0uY29udHJvbHMgPyBfYygic3BhbiIsIHsKICAgICAgICBkaXJlY3RpdmVzOiBbewogICAgICAgICAgbmFtZTogInJlcGVhdC1jbGljayIsCiAgICAgICAgICByYXdOYW1lOiAidi1yZXBlYXQtY2xpY2siLAogICAgICAgICAgdmFsdWU6IF92bS5kZWNyZWFzZSwKICAgICAgICAgIGV4cHJlc3Npb246ICJkZWNyZWFzZSIKICAgICAgICB9XSwKICAgICAgICBzdGF0aWNDbGFzczogImVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2UiLAogICAgICAgIGNsYXNzOiB7CiAgICAgICAgICAiaXMtZGlzYWJsZWQiOiBfdm0ubWluRGlzYWJsZWQKICAgICAgICB9LAogICAgICAgIGF0dHJzOiB7CiAgICAgICAgICByb2xlOiAiYnV0dG9uIgogICAgICAgIH0sCiAgICAgICAgb246IHsKICAgICAgICAgIGtleWRvd246IGZ1bmN0aW9uIGtleWRvd24oJGV2ZW50KSB7CiAgICAgICAgICAgIGlmICghKCJidXR0b24iIGluICRldmVudCkgJiYgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCAiZW50ZXIiLCAxMywgJGV2ZW50LmtleSwgIkVudGVyIikpIHsKICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIF92bS5kZWNyZWFzZSgkZXZlbnQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwgW19jKCJpIiwgewogICAgICAgIGNsYXNzOiAiZWwtaWNvbi0iICsgKF92bS5jb250cm9sc0F0UmlnaHQgPyAiYXJyb3ctZG93biIgOiAibWludXMiKQogICAgICB9KV0pIDogX3ZtLl9lKCksIF92bS5jb250cm9scyA/IF9jKCJzcGFuIiwgewogICAgICAgIGRpcmVjdGl2ZXM6IFt7CiAgICAgICAgICBuYW1lOiAicmVwZWF0LWNsaWNrIiwKICAgICAgICAgIHJhd05hbWU6ICJ2LXJlcGVhdC1jbGljayIsCiAgICAgICAgICB2YWx1ZTogX3ZtLmluY3JlYXNlLAogICAgICAgICAgZXhwcmVzc2lvbjogImluY3JlYXNlIgogICAgICAgIH1dLAogICAgICAgIHN0YXRpY0NsYXNzOiAiZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZSIsCiAgICAgICAgY2xhc3M6IHsKICAgICAgICAgICJpcy1kaXNhYmxlZCI6IF92bS5tYXhEaXNhYmxlZAogICAgICAgIH0sCiAgICAgICAgYXR0cnM6IHsKICAgICAgICAgIHJvbGU6ICJidXR0b24iCiAgICAgICAgfSwKICAgICAgICBvbjogewogICAgICAgICAga2V5ZG93bjogZnVuY3Rpb24ga2V5ZG93bigkZXZlbnQpIHsKICAgICAgICAgICAgaWYgKCEoImJ1dHRvbiIgaW4gJGV2ZW50KSAmJiBfdm0uX2soJGV2ZW50LmtleUNvZGUsICJlbnRlciIsIDEzLCAkZXZlbnQua2V5LCAiRW50ZXIiKSkgewogICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gX3ZtLmluY3JlYXNlKCRldmVudCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LCBbX2MoImkiLCB7CiAgICAgICAgY2xhc3M6ICJlbC1pY29uLSIgKyAoX3ZtLmNvbnRyb2xzQXRSaWdodCA/ICJhcnJvdy11cCIgOiAicGx1cyIpCiAgICAgIH0pXSkgOiBfdm0uX2UoKSwgX2MoImVsLWlucHV0IiwgewogICAgICAgIHJlZjogImlucHV0IiwKICAgICAgICBhdHRyczogewogICAgICAgICAgdmFsdWU6IF92bS5kaXNwbGF5VmFsdWUsCiAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLnBsYWNlaG9sZGVyLAogICAgICAgICAgZGlzYWJsZWQ6IF92bS5pbnB1dE51bWJlckRpc2FibGVkLAogICAgICAgICAgc2l6ZTogX3ZtLmlucHV0TnVtYmVyU2l6ZSwKICAgICAgICAgIG1heDogX3ZtLm1heCwKICAgICAgICAgIG1pbjogX3ZtLm1pbiwKICAgICAgICAgIG5hbWU6IF92bS5uYW1lLAogICAgICAgICAgbGFiZWw6IF92bS5sYWJlbAogICAgICAgIH0sCiAgICAgICAgb246IHsKICAgICAgICAgIGJsdXI6IF92bS5oYW5kbGVCbHVyLAogICAgICAgICAgZm9jdXM6IF92bS5oYW5kbGVGb2N1cywKICAgICAgICAgIGlucHV0OiBfdm0uaGFuZGxlSW5wdXQsCiAgICAgICAgICBjaGFuZ2U6IF92bS5oYW5kbGVJbnB1dENoYW5nZQogICAgICAgIH0sCiAgICAgICAgbmF0aXZlT246IHsKICAgICAgICAgIGtleWRvd246IFtmdW5jdGlvbiAoJGV2ZW50KSB7CiAgICAgICAgICAgIGlmICghKCJidXR0b24iIGluICRldmVudCkgJiYgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCAidXAiLCAzOCwgJGV2ZW50LmtleSwgWyJVcCIsICJBcnJvd1VwIl0pKSB7CiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICByZXR1cm4gX3ZtLmluY3JlYXNlKCRldmVudCk7CiAgICAgICAgICB9LCBmdW5jdGlvbiAoJGV2ZW50KSB7CiAgICAgICAgICAgIGlmICghKCJidXR0b24iIGluICRldmVudCkgJiYgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCAiZG93biIsIDQwLCAkZXZlbnQua2V5LCBbIkRvd24iLCAiQXJyb3dEb3duIl0pKSB7CiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICByZXR1cm4gX3ZtLmRlY3JlYXNlKCRldmVudCk7CiAgICAgICAgICB9XQogICAgICAgIH0KICAgICAgfSldLCAxKTsKICAgIH07CgogICAgdmFyIHN0YXRpY1JlbmRlckZucyA9IFtdOwogICAgcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlOyAvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2lucHV0LW51bWJlci9zcmMvaW5wdXQtbnVtYmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00MmY4Y2Y2NiYKICAgIC8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgImVsZW1lbnQtdWkvbGliL2lucHV0IgoKICAgIHZhciBpbnB1dF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTsKCiAgICB2YXIgaW5wdXRfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oaW5wdXRfKTsgLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCAiZWxlbWVudC11aS9saWIvbWl4aW5zL2ZvY3VzIgoKCiAgICB2YXIgZm9jdXNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMik7CgogICAgdmFyIGZvY3VzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGZvY3VzXyk7IC8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMvZGlyZWN0aXZlcy9yZXBlYXQtY2xpY2suanMKCgogICAgdmFyIHJlcGVhdF9jbGljayA9IF9fd2VicGFja19yZXF1aXJlX18oMzApOyAvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9pbnB1dC1udW1iZXIvc3JjL2lucHV0LW51bWJlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KCiAgICAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovCgoKICAgIHZhciBpbnB1dF9udW1iZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSB7CiAgICAgIG5hbWU6ICdFbElucHV0TnVtYmVyJywKICAgICAgbWl4aW5zOiBbZm9jdXNfZGVmYXVsdCgpKCdpbnB1dCcpXSwKICAgICAgaW5qZWN0OiB7CiAgICAgICAgZWxGb3JtOiB7CiAgICAgICAgICBkZWZhdWx0OiAnJwogICAgICAgIH0sCiAgICAgICAgZWxGb3JtSXRlbTogewogICAgICAgICAgZGVmYXVsdDogJycKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRpcmVjdGl2ZXM6IHsKICAgICAgICByZXBlYXRDbGljazogcmVwZWF0X2NsaWNrWyJhIgogICAgICAgIC8qIGRlZmF1bHQgKi8KICAgICAgICBdCiAgICAgIH0sCiAgICAgIGNvbXBvbmVudHM6IHsKICAgICAgICBFbElucHV0OiBpbnB1dF9kZWZhdWx0LmEKICAgICAgfSwKICAgICAgcHJvcHM6IHsKICAgICAgICBzdGVwOiB7CiAgICAgICAgICB0eXBlOiBOdW1iZXIsCiAgICAgICAgICBkZWZhdWx0OiAxCiAgICAgICAgfSwKICAgICAgICBzdGVwU3RyaWN0bHk6IHsKICAgICAgICAgIHR5cGU6IEJvb2xlYW4sCiAgICAgICAgICBkZWZhdWx0OiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgbWF4OiB7CiAgICAgICAgICB0eXBlOiBOdW1iZXIsCiAgICAgICAgICBkZWZhdWx0OiBJbmZpbml0eQogICAgICAgIH0sCiAgICAgICAgbWluOiB7CiAgICAgICAgICB0eXBlOiBOdW1iZXIsCiAgICAgICAgICBkZWZhdWx0OiAtSW5maW5pdHkKICAgICAgICB9LAogICAgICAgIHZhbHVlOiB7fSwKICAgICAgICBkaXNhYmxlZDogQm9vbGVhbiwKICAgICAgICBzaXplOiBTdHJpbmcsCiAgICAgICAgY29udHJvbHM6IHsKICAgICAgICAgIHR5cGU6IEJvb2xlYW4sCiAgICAgICAgICBkZWZhdWx0OiB0cnVlCiAgICAgICAgfSwKICAgICAgICBjb250cm9sc1Bvc2l0aW9uOiB7CiAgICAgICAgICB0eXBlOiBTdHJpbmcsCiAgICAgICAgICBkZWZhdWx0OiAnJwogICAgICAgIH0sCiAgICAgICAgbmFtZTogU3RyaW5nLAogICAgICAgIGxhYmVsOiBTdHJpbmcsCiAgICAgICAgcGxhY2Vob2xkZXI6IFN0cmluZywKICAgICAgICBwcmVjaXNpb246IHsKICAgICAgICAgIHR5cGU6IE51bWJlciwKICAgICAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCkgewogICAgICAgICAgICByZXR1cm4gdmFsID49IDAgJiYgdmFsID09PSBwYXJzZUludCh2YWwsIDEwKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGN1cnJlbnRWYWx1ZTogMCwKICAgICAgICAgIHVzZXJJbnB1dDogbnVsbAogICAgICAgIH07CiAgICAgIH0sCiAgICAgIHdhdGNoOiB7CiAgICAgICAgdmFsdWU6IHsKICAgICAgICAgIGltbWVkaWF0ZTogdHJ1ZSwKICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIodmFsdWUpIHsKICAgICAgICAgICAgdmFyIG5ld1ZhbCA9IHZhbHVlID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IE51bWJlcih2YWx1ZSk7CgogICAgICAgICAgICBpZiAobmV3VmFsICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICBpZiAoaXNOYU4obmV3VmFsKSkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgaWYgKHRoaXMuc3RlcFN0cmljdGx5KSB7CiAgICAgICAgICAgICAgICB2YXIgc3RlcFByZWNpc2lvbiA9IHRoaXMuZ2V0UHJlY2lzaW9uKHRoaXMuc3RlcCk7CiAgICAgICAgICAgICAgICB2YXIgcHJlY2lzaW9uRmFjdG9yID0gTWF0aC5wb3coMTAsIHN0ZXBQcmVjaXNpb24pOwogICAgICAgICAgICAgICAgbmV3VmFsID0gTWF0aC5yb3VuZChuZXdWYWwgLyB0aGlzLnN0ZXApICogcHJlY2lzaW9uRmFjdG9yICogdGhpcy5zdGVwIC8gcHJlY2lzaW9uRmFjdG9yOwogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgaWYgKHRoaXMucHJlY2lzaW9uICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIG5ld1ZhbCA9IHRoaXMudG9QcmVjaXNpb24obmV3VmFsLCB0aGlzLnByZWNpc2lvbik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobmV3VmFsID49IHRoaXMubWF4KSBuZXdWYWwgPSB0aGlzLm1heDsKICAgICAgICAgICAgaWYgKG5ld1ZhbCA8PSB0aGlzLm1pbikgbmV3VmFsID0gdGhpcy5taW47CiAgICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsOwogICAgICAgICAgICB0aGlzLnVzZXJJbnB1dCA9IG51bGw7CiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgbmV3VmFsKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIGNvbXB1dGVkOiB7CiAgICAgICAgbWluRGlzYWJsZWQ6IGZ1bmN0aW9uIG1pbkRpc2FibGVkKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuX2RlY3JlYXNlKHRoaXMudmFsdWUsIHRoaXMuc3RlcCkgPCB0aGlzLm1pbjsKICAgICAgICB9LAogICAgICAgIG1heERpc2FibGVkOiBmdW5jdGlvbiBtYXhEaXNhYmxlZCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLl9pbmNyZWFzZSh0aGlzLnZhbHVlLCB0aGlzLnN0ZXApID4gdGhpcy5tYXg7CiAgICAgICAgfSwKICAgICAgICBudW1QcmVjaXNpb246IGZ1bmN0aW9uIG51bVByZWNpc2lvbigpIHsKICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUsCiAgICAgICAgICAgICAgc3RlcCA9IHRoaXMuc3RlcCwKICAgICAgICAgICAgICBnZXRQcmVjaXNpb24gPSB0aGlzLmdldFByZWNpc2lvbiwKICAgICAgICAgICAgICBwcmVjaXNpb24gPSB0aGlzLnByZWNpc2lvbjsKICAgICAgICAgIHZhciBzdGVwUHJlY2lzaW9uID0gZ2V0UHJlY2lzaW9uKHN0ZXApOwoKICAgICAgICAgIGlmIChwcmVjaXNpb24gIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBpZiAoc3RlcFByZWNpc2lvbiA+IHByZWNpc2lvbikgewogICAgICAgICAgICAgIGNvbnNvbGUud2FybignW0VsZW1lbnQgV2Fybl1bSW5wdXROdW1iZXJdcHJlY2lzaW9uIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuIHRoZSBkZWNpbWFsIHBsYWNlcyBvZiBzdGVwJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBwcmVjaXNpb247CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoZ2V0UHJlY2lzaW9uKHZhbHVlKSwgc3RlcFByZWNpc2lvbik7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjb250cm9sc0F0UmlnaHQ6IGZ1bmN0aW9uIGNvbnRyb2xzQXRSaWdodCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xzICYmIHRoaXMuY29udHJvbHNQb3NpdGlvbiA9PT0gJ3JpZ2h0JzsKICAgICAgICB9LAogICAgICAgIF9lbEZvcm1JdGVtU2l6ZTogZnVuY3Rpb24gX2VsRm9ybUl0ZW1TaXplKCkgewogICAgICAgICAgcmV0dXJuICh0aGlzLmVsRm9ybUl0ZW0gfHwge30pLmVsRm9ybUl0ZW1TaXplOwogICAgICAgIH0sCiAgICAgICAgaW5wdXROdW1iZXJTaXplOiBmdW5jdGlvbiBpbnB1dE51bWJlclNpemUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5zaXplIHx8IHRoaXMuX2VsRm9ybUl0ZW1TaXplIHx8ICh0aGlzLiRFTEVNRU5UIHx8IHt9KS5zaXplOwogICAgICAgIH0sCiAgICAgICAgaW5wdXROdW1iZXJEaXNhYmxlZDogZnVuY3Rpb24gaW5wdXROdW1iZXJEaXNhYmxlZCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8ICEhKHRoaXMuZWxGb3JtIHx8IHt9KS5kaXNhYmxlZDsKICAgICAgICB9LAogICAgICAgIGRpc3BsYXlWYWx1ZTogZnVuY3Rpb24gZGlzcGxheVZhbHVlKCkgewogICAgICAgICAgaWYgKHRoaXMudXNlcklucHV0ICE9PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnVzZXJJbnB1dDsKICAgICAgICAgIH0KCiAgICAgICAgICB2YXIgY3VycmVudFZhbHVlID0gdGhpcy5jdXJyZW50VmFsdWU7CgogICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50VmFsdWUgPT09ICdudW1iZXInKSB7CiAgICAgICAgICAgIGlmICh0aGlzLnN0ZXBTdHJpY3RseSkgewogICAgICAgICAgICAgIHZhciBzdGVwUHJlY2lzaW9uID0gdGhpcy5nZXRQcmVjaXNpb24odGhpcy5zdGVwKTsKICAgICAgICAgICAgICB2YXIgcHJlY2lzaW9uRmFjdG9yID0gTWF0aC5wb3coMTAsIHN0ZXBQcmVjaXNpb24pOwogICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IE1hdGgucm91bmQoY3VycmVudFZhbHVlIC8gdGhpcy5zdGVwKSAqIHByZWNpc2lvbkZhY3RvciAqIHRoaXMuc3RlcCAvIHByZWNpc2lvbkZhY3RvcjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHRoaXMucHJlY2lzaW9uICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWUudG9GaXhlZCh0aGlzLnByZWNpc2lvbik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbWV0aG9kczogewogICAgICAgIHRvUHJlY2lzaW9uOiBmdW5jdGlvbiB0b1ByZWNpc2lvbihudW0sIHByZWNpc2lvbikgewogICAgICAgICAgaWYgKHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkKSBwcmVjaXNpb24gPSB0aGlzLm51bVByZWNpc2lvbjsKICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KE1hdGgucm91bmQobnVtICogTWF0aC5wb3coMTAsIHByZWNpc2lvbikpIC8gTWF0aC5wb3coMTAsIHByZWNpc2lvbikpOwogICAgICAgIH0sCiAgICAgICAgZ2V0UHJlY2lzaW9uOiBmdW5jdGlvbiBnZXRQcmVjaXNpb24odmFsdWUpIHsKICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMDsKICAgICAgICAgIHZhciB2YWx1ZVN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCk7CiAgICAgICAgICB2YXIgZG90UG9zaXRpb24gPSB2YWx1ZVN0cmluZy5pbmRleE9mKCcuJyk7CiAgICAgICAgICB2YXIgcHJlY2lzaW9uID0gMDsKCiAgICAgICAgICBpZiAoZG90UG9zaXRpb24gIT09IC0xKSB7CiAgICAgICAgICAgIHByZWNpc2lvbiA9IHZhbHVlU3RyaW5nLmxlbmd0aCAtIGRvdFBvc2l0aW9uIC0gMTsKICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gcHJlY2lzaW9uOwogICAgICAgIH0sCiAgICAgICAgX2luY3JlYXNlOiBmdW5jdGlvbiBfaW5jcmVhc2UodmFsLCBzdGVwKSB7CiAgICAgICAgICBpZiAodHlwZW9mIHZhbCAhPT0gJ251bWJlcicgJiYgdmFsICE9PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLmN1cnJlbnRWYWx1ZTsKICAgICAgICAgIHZhciBwcmVjaXNpb25GYWN0b3IgPSBNYXRoLnBvdygxMCwgdGhpcy5udW1QcmVjaXNpb24pOyAvLyBTb2x2ZSB0aGUgYWNjdXJhY3kgcHJvYmxlbSBvZiBKUyBkZWNpbWFsIGNhbGN1bGF0aW9uIGJ5IGNvbnZlcnRpbmcgdGhlIHZhbHVlIHRvIGludGVnZXIuCgogICAgICAgICAgcmV0dXJuIHRoaXMudG9QcmVjaXNpb24oKHByZWNpc2lvbkZhY3RvciAqIHZhbCArIHByZWNpc2lvbkZhY3RvciAqIHN0ZXApIC8gcHJlY2lzaW9uRmFjdG9yKTsKICAgICAgICB9LAogICAgICAgIF9kZWNyZWFzZTogZnVuY3Rpb24gX2RlY3JlYXNlKHZhbCwgc3RlcCkgewogICAgICAgICAgaWYgKHR5cGVvZiB2YWwgIT09ICdudW1iZXInICYmIHZhbCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5jdXJyZW50VmFsdWU7CiAgICAgICAgICB2YXIgcHJlY2lzaW9uRmFjdG9yID0gTWF0aC5wb3coMTAsIHRoaXMubnVtUHJlY2lzaW9uKTsKICAgICAgICAgIHJldHVybiB0aGlzLnRvUHJlY2lzaW9uKChwcmVjaXNpb25GYWN0b3IgKiB2YWwgLSBwcmVjaXNpb25GYWN0b3IgKiBzdGVwKSAvIHByZWNpc2lvbkZhY3Rvcik7CiAgICAgICAgfSwKICAgICAgICBpbmNyZWFzZTogZnVuY3Rpb24gaW5jcmVhc2UoKSB7CiAgICAgICAgICBpZiAodGhpcy5pbnB1dE51bWJlckRpc2FibGVkIHx8IHRoaXMubWF4RGlzYWJsZWQpIHJldHVybjsKICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUgfHwgMDsKCiAgICAgICAgICB2YXIgbmV3VmFsID0gdGhpcy5faW5jcmVhc2UodmFsdWUsIHRoaXMuc3RlcCk7CgogICAgICAgICAgdGhpcy5zZXRDdXJyZW50VmFsdWUobmV3VmFsKTsKICAgICAgICB9LAogICAgICAgIGRlY3JlYXNlOiBmdW5jdGlvbiBkZWNyZWFzZSgpIHsKICAgICAgICAgIGlmICh0aGlzLmlucHV0TnVtYmVyRGlzYWJsZWQgfHwgdGhpcy5taW5EaXNhYmxlZCkgcmV0dXJuOwogICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZSB8fCAwOwoKICAgICAgICAgIHZhciBuZXdWYWwgPSB0aGlzLl9kZWNyZWFzZSh2YWx1ZSwgdGhpcy5zdGVwKTsKCiAgICAgICAgICB0aGlzLnNldEN1cnJlbnRWYWx1ZShuZXdWYWwpOwogICAgICAgIH0sCiAgICAgICAgaGFuZGxlQmx1cjogZnVuY3Rpb24gaGFuZGxlQmx1cihldmVudCkgewogICAgICAgICAgdGhpcy4kZW1pdCgnYmx1cicsIGV2ZW50KTsKICAgICAgICB9LAogICAgICAgIGhhbmRsZUZvY3VzOiBmdW5jdGlvbiBoYW5kbGVGb2N1cyhldmVudCkgewogICAgICAgICAgdGhpcy4kZW1pdCgnZm9jdXMnLCBldmVudCk7CiAgICAgICAgfSwKICAgICAgICBzZXRDdXJyZW50VmFsdWU6IGZ1bmN0aW9uIHNldEN1cnJlbnRWYWx1ZShuZXdWYWwpIHsKICAgICAgICAgIHZhciBvbGRWYWwgPSB0aGlzLmN1cnJlbnRWYWx1ZTsKCiAgICAgICAgICBpZiAodHlwZW9mIG5ld1ZhbCA9PT0gJ251bWJlcicgJiYgdGhpcy5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBuZXdWYWwgPSB0aGlzLnRvUHJlY2lzaW9uKG5ld1ZhbCwgdGhpcy5wcmVjaXNpb24pOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChuZXdWYWwgPj0gdGhpcy5tYXgpIG5ld1ZhbCA9IHRoaXMubWF4OwogICAgICAgICAgaWYgKG5ld1ZhbCA8PSB0aGlzLm1pbikgbmV3VmFsID0gdGhpcy5taW47CiAgICAgICAgICBpZiAob2xkVmFsID09PSBuZXdWYWwpIHJldHVybjsKICAgICAgICAgIHRoaXMudXNlcklucHV0ID0gbnVsbDsKICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgbmV3VmFsKTsKICAgICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIG5ld1ZhbCwgb2xkVmFsKTsKICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsOwogICAgICAgIH0sCiAgICAgICAgaGFuZGxlSW5wdXQ6IGZ1bmN0aW9uIGhhbmRsZUlucHV0KHZhbHVlKSB7CiAgICAgICAgICB0aGlzLnVzZXJJbnB1dCA9IHZhbHVlOwogICAgICAgIH0sCiAgICAgICAgaGFuZGxlSW5wdXRDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUlucHV0Q2hhbmdlKHZhbHVlKSB7CiAgICAgICAgICB2YXIgbmV3VmFsID0gdmFsdWUgPT09ICcnID8gdW5kZWZpbmVkIDogTnVtYmVyKHZhbHVlKTsKCiAgICAgICAgICBpZiAoIWlzTmFOKG5ld1ZhbCkgfHwgdmFsdWUgPT09ICcnKSB7CiAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudFZhbHVlKG5ld1ZhbCk7CiAgICAgICAgICB9CgogICAgICAgICAgdGhpcy51c2VySW5wdXQgPSBudWxsOwogICAgICAgIH0sCiAgICAgICAgc2VsZWN0OiBmdW5jdGlvbiBzZWxlY3QoKSB7CiAgICAgICAgICB0aGlzLiRyZWZzLmlucHV0LnNlbGVjdCgpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHsKICAgICAgICB2YXIgaW5uZXJJbnB1dCA9IHRoaXMuJHJlZnMuaW5wdXQuJHJlZnMuaW5wdXQ7CiAgICAgICAgaW5uZXJJbnB1dC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnc3BpbmJ1dHRvbicpOwogICAgICAgIGlubmVySW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLXZhbHVlbWF4JywgdGhpcy5tYXgpOwogICAgICAgIGlubmVySW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLXZhbHVlbWluJywgdGhpcy5taW4pOwogICAgICAgIGlubmVySW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLXZhbHVlbm93JywgdGhpcy5jdXJyZW50VmFsdWUpOwogICAgICAgIGlubmVySW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJywgdGhpcy5pbnB1dE51bWJlckRpc2FibGVkKTsKICAgICAgfSwKICAgICAgdXBkYXRlZDogZnVuY3Rpb24gdXBkYXRlZCgpIHsKICAgICAgICBpZiAoIXRoaXMuJHJlZnMgfHwgIXRoaXMuJHJlZnMuaW5wdXQpIHJldHVybjsKICAgICAgICB2YXIgaW5uZXJJbnB1dCA9IHRoaXMuJHJlZnMuaW5wdXQuJHJlZnMuaW5wdXQ7CiAgICAgICAgaW5uZXJJbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtdmFsdWVub3cnLCB0aGlzLmN1cnJlbnRWYWx1ZSk7CiAgICAgIH0KICAgIH07IC8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW5wdXQtbnVtYmVyL3NyYy9pbnB1dC1udW1iZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgoKICAgIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8KCiAgICB2YXIgc3JjX2lucHV0X251bWJlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IGlucHV0X251bWJlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsgLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMKCiAgICB2YXIgY29tcG9uZW50Tm9ybWFsaXplciA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7IC8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW5wdXQtbnVtYmVyL3NyYy9pbnB1dC1udW1iZXIudnVlCgogICAgLyogbm9ybWFsaXplIGNvbXBvbmVudCAqLwoKCiAgICB2YXIgY29tcG9uZW50ID0gT2JqZWN0KGNvbXBvbmVudE5vcm1hbGl6ZXJbImEiCiAgICAvKiBkZWZhdWx0ICovCiAgICBdKShzcmNfaW5wdXRfbnVtYmVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLCByZW5kZXIsIHN0YXRpY1JlbmRlckZucywgZmFsc2UsIG51bGwsIG51bGwsIG51bGwpOwogICAgLyogaG90IHJlbG9hZCAqLwoKICAgIGlmIChmYWxzZSkgewogICAgICB2YXIgYXBpOwogICAgfQoKICAgIGNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9ICJwYWNrYWdlcy9pbnB1dC1udW1iZXIvc3JjL2lucHV0LW51bWJlci52dWUiOwogICAgLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLwoKICAgIHZhciBpbnB1dF9udW1iZXIgPSBjb21wb25lbnQuZXhwb3J0czsgLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbnB1dC1udW1iZXIvaW5kZXguanMKCiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLwoKICAgIGlucHV0X251bWJlci5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkgewogICAgICBWdWUuY29tcG9uZW50KGlucHV0X251bWJlci5uYW1lLCBpbnB1dF9udW1iZXIpOwogICAgfTsKICAgIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8KCgogICAgdmFyIHBhY2thZ2VzX2lucHV0X251bWJlciA9IF9fd2VicGFja19leHBvcnRzX19bImRlZmF1bHQiXSA9IGlucHV0X251bWJlcjsKICAgIC8qKiovCiAgfSwKCiAgLyoqKi8KICAyOgogIC8qKiovCiAgZnVuY3Rpb24gXyhtb2R1bGUsIGV4cG9ydHMpIHsKICAgIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgiZWxlbWVudC11aS9saWIvdXRpbHMvZG9tIik7CiAgICAvKioqLwogIH0sCgogIC8qKiovCiAgMjI6CiAgLyoqKi8KICBmdW5jdGlvbiBfKG1vZHVsZSwgZXhwb3J0cykgewogICAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZm9jdXMiKTsKICAgIC8qKiovCiAgfSwKCiAgLyoqKi8KICAzMDoKICAvKioqLwogIGZ1bmN0aW9uIF8obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICAvKiBoYXJtb255IGltcG9ydCAqLwoKICAgIHZhciBlbGVtZW50X3VpX3NyY191dGlsc19kb21fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7CiAgICAvKiBoYXJtb255IGltcG9ydCAqLwoKCiAgICB2YXIgZWxlbWVudF91aV9zcmNfdXRpbHNfZG9tX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZWxlbWVudF91aV9zcmNfdXRpbHNfZG9tX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pOwogICAgLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLwoKCiAgICBfX3dlYnBhY2tfZXhwb3J0c19fWyJhIl0gPSB7CiAgICAgIGJpbmQ6IGZ1bmN0aW9uIGJpbmQoZWwsIGJpbmRpbmcsIHZub2RlKSB7CiAgICAgICAgdmFyIGludGVydmFsID0gbnVsbDsKICAgICAgICB2YXIgc3RhcnRUaW1lID0gdm9pZCAwOwoKICAgICAgICB2YXIgaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoKSB7CiAgICAgICAgICByZXR1cm4gdm5vZGUuY29udGV4dFtiaW5kaW5nLmV4cHJlc3Npb25dLmFwcGx5KCk7CiAgICAgICAgfTsKCiAgICAgICAgdmFyIGNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7CiAgICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA8IDEwMCkgewogICAgICAgICAgICBoYW5kbGVyKCk7CiAgICAgICAgICB9CgogICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7CiAgICAgICAgICBpbnRlcnZhbCA9IG51bGw7CiAgICAgICAgfTsKCiAgICAgICAgT2JqZWN0KGVsZW1lbnRfdWlfc3JjX3V0aWxzX2RvbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJvbiJdKShlbCwgJ21vdXNlZG93bicsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICBpZiAoZS5idXR0b24gIT09IDApIHJldHVybjsKICAgICAgICAgIHN0YXJ0VGltZSA9IERhdGUubm93KCk7CiAgICAgICAgICBPYmplY3QoZWxlbWVudF91aV9zcmNfdXRpbHNfZG9tX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIm9uY2UiXSkoZG9jdW1lbnQsICdtb3VzZXVwJywgY2xlYXIpOwogICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7CiAgICAgICAgICBpbnRlcnZhbCA9IHNldEludGVydmFsKGhhbmRsZXIsIDEwMCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICAvKioqLwogIH0KICAvKioqKioqLwoKfSk7"},null]}