diff --git a/.gitignore b/.gitignore index e8ce8b4d..27b57ca3 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,7 @@ .DS_Store #Ignore node_modules -node_modules \ No newline at end of file +node_modules + +#Ignore PHP storm config +.idea \ No newline at end of file diff --git a/Readme.txt b/Readme.txt index d195db60..04ac7737 100755 --- a/Readme.txt +++ b/Readme.txt @@ -19,6 +19,7 @@ The Reepay plugin extends WooCommerce allowing you to take payments on your stor See installation guide right here: https://intercom.help/reepay/reepay-plugins/woocommerce-plugin == Changelog == +v 1.2.2 - Small visual improvements v 1.2.1 - Smaller bugfixes v 1.2.0 - Lot of chanegs including direct actions on an order in woorcommerce. v 1.1.27 - Added advanced instant-settle + payment-widget in back-office diff --git a/assets/css/style.css b/assets/css/style.css index 706661c9..fabd4fa9 100755 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -76,7 +76,7 @@ margin-right: 25px; max-width: 100px; } -.reepay-partly_capture_amount { +.reepay-partly_capture_amount, .reepay-partly_refund_amount { background-color: #f9f9f9; box-sizing: border-box; float: left; @@ -96,9 +96,20 @@ display: flex; /* NEW, Spec - Firefox, Chrome, Opera */ } -.reepay-capture_partly_amount-field { +.reepay-capture_partly_amount-field, .reepay-refund_partly_amount-field { width: 90px; font-size: small; max-height: 20px; min-height: 1px !important; text-align: center; } + +#payment .wc_payment_methods li label { + display: flex !important; } + #payment .wc_payment_methods li label .reepay-logos { + display: flex; + flex-wrap: wrap; + margin-left: auto; + justify-content: flex-end; + max-width: 300px; } + #payment .wc_payment_methods li label .reepay-logos .reepay-logo img { + margin: .25rem; } diff --git a/assets/css/style.min.css b/assets/css/style.min.css index bd0af2b7..237144b2 100755 --- a/assets/css/style.min.css +++ b/assets/css/style.min.css @@ -1,2 +1,2 @@ -.reepay-admin-section-li-header{width:100%;font-weight:700}.reepay-admin-section-li-header-small{width:100%;font-weight:700;font-size:small;margin-bottom:0}.reepay-admin-section-li{width:100%}.reepay-admin-section-li-small{width:100%;font-size:small;margin-top:0}.reepay-balance__amount,.reepay-balance__label,.reepay-partly_capture_amount{background-color:#f9f9f9;box-sizing:border-box;float:left;text-transform:uppercase;font-size:10px;color:#8a8a8a}.reepay-full-width,.reepay-full-width .button{width:100%;display:block;text-align:center;clear:both}.reepay-balance{margin-bottom:0}.reepay-balance.last{margin-bottom:5px}.reepay-balance:after{clear:both;content:"";display:table}.reepay-balance__amount,.reepay-balance__label{padding:7px 10px}.reepay-balance__label{font-weight:700;width:60%;border-right:2.5px solid #FFF}.reepay-balance__amount,.reepay-partly_capture_amount{border-right:0;width:40%;border-left:2.5px solid #FFF}.reepay-balance__amount{display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.reepay-balance__currency{margin-right:10px}.reepay-balance.last .reepay-balance__currency{margin-right:0}.reepay-admin-card-logo{text-align:center;margin-right:25px;max-width:100px}.reepay-partly_capture_amount{padding:4px 10px;display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.reepay-capture_partly_amount-field{width:90px;font-size:small;max-height:20px;min-height:1px!important;text-align:center} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsZ0NBQ0MsTUFBTyxLQUNQLFlBQWEsSUFHZCxzQ0FDQyxNQUFPLEtBQ1AsWUFBYSxJQUNiLFVBQVcsTUFDWCxjQUFlLEVBR2hCLHlCQUNDLE1BQU8sS0FHUiwrQkFDQyxNQUFPLEtBQ1AsVUFBVyxNQUNYLFdBQVksRUF5QmIsd0JBREEsdUJBd0NBLDhCQUNDLGlCQUFrQixRQUNsQixXQUFZLFdBQ1osTUFBTyxLQUVQLGVBQWdCLFVBQ2hCLFVBQVcsS0FDWCxNQUFPLFFBcEVSLG1CQUFvQiwyQkFDbkIsTUFBTyxLQUNQLFFBQVMsTUFDVCxXQUFZLE9BQ1osTUFBTyxLQUdSLGdCQUNDLGNBQWUsRUFHaEIscUJBQ0MsY0FBZSxJQUdoQixzQkFDQyxNQUFPLEtBQ1AsUUFBUyxHQUNULFFBQVMsTUFJVix3QkFEQSx1QkFLQyxRQUFTLElBQUEsS0FNVix1QkFDQyxZQUFhLElBQ2IsTUFBTyxJQUNQLGFBQWMsTUFBQSxNQUFBLEtBRWYsd0JBd0JBLDhCQVNDLGFBQWMsRUFDZCxNQUFPLElBQ1AsWUFBYSxNQUFBLE1BQUEsS0FuQ2Qsd0JBSUMsUUFBUyxZQUNULFFBQVMsWUFDVCxRQUFTLGFBQ1QsUUFBUyxLQUdWLDBCQUNDLGFBQWMsS0FHZiwrQ0FDQyxhQUFjLEVBR2Ysd0JBQ0MsV0FBWSxPQUNaLGFBQWMsS0FDZCxVQUFXLE1BR1osOEJBSUMsUUFBUyxJQUFBLEtBUVQsUUFBUyxZQUNULFFBQW9CLFlBQ3BCLFFBQXFCLGFBQ3JCLFFBQWEsS0FHZCxvQ0FDQyxNQUFPLEtBQ1AsVUFBVyxNQUNYLFdBQVksS0FDWixXQUFZLGNBQ1osV0FBWSIsImZpbGUiOiJzdHlsZS5taW4uY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLnJlZXBheS1sb2dvcyB7XG4gIC8qIGRpc3BsYXk6IHRhYmxlLWNlbGw7ICovXG59XG5cbi5yZWVwYXktbG9nbyB7XG4gIC8qIGZsb2F0OiBsZWZ0OyAqL1xuICAvKiBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7ICovXG4gIC8qIHBhZGRpbmc6IDVweDsgKi9cbn1cbiAgXG4ucmVlcGF5LWFkbWluLXNlY3Rpb24tbGktaGVhZGVyIHtcblx0d2lkdGg6IDEwMCU7XG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4ucmVlcGF5LWFkbWluLXNlY3Rpb24tbGktaGVhZGVyLXNtYWxsIHtcblx0d2lkdGg6IDEwMCU7XG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xuXHRmb250LXNpemU6IHNtYWxsO1xuXHRtYXJnaW4tYm90dG9tOiAwcHg7XG59XG5cbi5yZWVwYXktYWRtaW4tc2VjdGlvbi1saSB7XG5cdHdpZHRoOiAxMDAlO1xufVxuXG4ucmVlcGF5LWFkbWluLXNlY3Rpb24tbGktc21hbGwge1xuXHR3aWR0aDogMTAwJTtcblx0Zm9udC1zaXplOiBzbWFsbDtcblx0bWFyZ2luLXRvcDogMHB4O1xufVxuXG4ucmVlcGF5LWZ1bGwtd2lkdGgsIC5yZWVwYXktZnVsbC13aWR0aCAuYnV0dG9uIHtcblx0d2lkdGg6IDEwMCU7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdGNsZWFyOiBib3RoO1xufVxuXG4ucmVlcGF5LWJhbGFuY2Uge1xuXHRtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4ucmVlcGF5LWJhbGFuY2UubGFzdCB7XG5cdG1hcmdpbi1ib3R0b206IDVweDtcbn1cblxuLnJlZXBheS1iYWxhbmNlOmFmdGVyIHtcblx0Y2xlYXI6IGJvdGg7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdGRpc3BsYXk6IHRhYmxlO1xufVxuXG4ucmVlcGF5LWJhbGFuY2VfX2xhYmVsLFxuLnJlZXBheS1iYWxhbmNlX19hbW91bnQge1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWY5O1xuXHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHRmbG9hdDogbGVmdDtcblx0cGFkZGluZzogN3B4IDEwcHg7XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGZvbnQtc2l6ZTogMTBweDtcblx0Y29sb3I6ICM4YThhOGE7XG59XG5cbi5yZWVwYXktYmFsYW5jZV9fbGFiZWwge1xuXHRmb250LXdlaWdodDogYm9sZDtcblx0d2lkdGg6IDYwJTtcblx0Ym9yZGVyLXJpZ2h0OiAyLjVweCBzb2xpZCAjRkZGO1xufVxuLnJlZXBheS1iYWxhbmNlX19hbW91bnQge1xuXHRib3JkZXItcmlnaHQ6IDA7XG5cdHdpZHRoOiA0MCU7XG5cdGJvcmRlci1sZWZ0OiAyLjVweCBzb2xpZCAjRkZGO1xuXHRkaXNwbGF5OiAtd2Via2l0LWJveDtcblx0ZGlzcGxheTogLW1zLWZsZXhib3g7XG5cdGRpc3BsYXk6IC13ZWJraXQtZmxleDtcblx0ZGlzcGxheTogZmxleDtcbn1cblxuLnJlZXBheS1iYWxhbmNlX19jdXJyZW5jeSB7XG5cdG1hcmdpbi1yaWdodDogMTBweDtcbn1cblxuLnJlZXBheS1iYWxhbmNlLmxhc3QgLnJlZXBheS1iYWxhbmNlX19jdXJyZW5jeSB7XG5cdG1hcmdpbi1yaWdodDogMDtcbn1cblxuLnJlZXBheS1hZG1pbi1jYXJkLWxvZ28ge1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7IFxuXHRtYXJnaW4tcmlnaHQ6IDI1cHg7XG5cdG1heC13aWR0aDogMTAwcHg7XG59XG5cbi5yZWVwYXktcGFydGx5X2NhcHR1cmVfYW1vdW50IHtcblx0YmFja2dyb3VuZC1jb2xvcjogI2Y5ZjlmOTtcblx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcblx0ZmxvYXQ6IGxlZnQ7XG5cdHBhZGRpbmc6IDRweCAxMHB4O1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRmb250LXNpemU6IDEwcHg7XG5cdGNvbG9yOiAjOGE4YThhO1xuXHRcblx0Ym9yZGVyLXJpZ2h0OiAwO1xuXHR3aWR0aDogNDAlO1xuXHRib3JkZXItbGVmdDogMi41cHggc29saWQgI0ZGRjtcblx0ZGlzcGxheTogLXdlYmtpdC1ib3g7ICAvKiBPTEQgLSBpT1MgNi0sIFNhZmFyaSAzLjEtNiwgQkI3ICovXG5cdGRpc3BsYXk6IC1tcy1mbGV4Ym94OyAgLyogVFdFRU5FUiAtIElFIDEwICovXG5cdGRpc3BsYXk6IC13ZWJraXQtZmxleDsgLyogTkVXIC0gU2FmYXJpIDYuMSsuIGlPUyA3LjErLCBCQjEwICovXG5cdGRpc3BsYXk6IGZsZXg7ICAgICAgICAgLyogTkVXLCBTcGVjIC0gRmlyZWZveCwgQ2hyb21lLCBPcGVyYSAqL1xufVxuXG4ucmVlcGF5LWNhcHR1cmVfcGFydGx5X2Ftb3VudC1maWVsZCB7XG5cdHdpZHRoOiA5MHB4O1xuXHRmb250LXNpemU6IHNtYWxsO1xuXHRtYXgtaGVpZ2h0OiAyMHB4O1xuXHRtaW4taGVpZ2h0OiAxcHggIWltcG9ydGFudDtcblx0dGV4dC1hbGlnbjogY2VudGVyOyBcbn0iXX0= */ +.reepay-admin-section-li-header{width:100%;font-weight:700}.reepay-admin-section-li-header-small{width:100%;font-weight:700;font-size:small;margin-bottom:0}.reepay-admin-section-li{width:100%}.reepay-admin-section-li-small{width:100%;font-size:small;margin-top:0}.reepay-balance__amount,.reepay-balance__label,.reepay-partly_capture_amount,.reepay-partly_refund_amount{background-color:#f9f9f9;box-sizing:border-box;float:left;text-transform:uppercase;font-size:10px;color:#8a8a8a}.reepay-full-width,.reepay-full-width .button{width:100%;display:block;text-align:center;clear:both}.reepay-balance{margin-bottom:0}.reepay-balance.last{margin-bottom:5px}.reepay-balance:after{clear:both;content:"";display:table}.reepay-balance__amount,.reepay-balance__label{padding:7px 10px}.reepay-balance__label{font-weight:700;width:60%;border-right:2.5px solid #FFF}.reepay-balance__amount{border-right:0;width:40%;border-left:2.5px solid #FFF;display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.reepay-balance__currency{margin-right:10px}.reepay-balance.last .reepay-balance__currency{margin-right:0}.reepay-admin-card-logo{text-align:center;margin-right:25px;max-width:100px}.reepay-partly_capture_amount,.reepay-partly_refund_amount{padding:4px 10px;border-right:0;width:40%;border-left:2.5px solid #FFF;display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.reepay-capture_partly_amount-field,.reepay-refund_partly_amount-field{width:90px;font-size:small;max-height:20px;min-height:1px!important;text-align:center}#payment .wc_payment_methods li label{display:flex!important}#payment .wc_payment_methods li label .reepay-logos{display:flex;flex-wrap:wrap;margin-left:auto;justify-content:flex-end;max-width:300px}#payment .wc_payment_methods li label .reepay-logos .reepay-logo img{margin:.25rem} +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsZ0NBQ0MsTUFBTyxLQUNQLFlBQWEsSUFHZCxzQ0FDQyxNQUFPLEtBQ1AsWUFBYSxJQUNiLFVBQVcsTUFDWCxjQUFlLEVBR2hCLHlCQUNDLE1BQU8sS0FHUiwrQkFDQyxNQUFPLEtBQ1AsVUFBVyxNQUNYLFdBQVksRUF5QmIsd0JBREEsdUJBd0NBLDhCQUErQiw2QkFDOUIsaUJBQWtCLFFBQ2xCLFdBQVksV0FDWixNQUFPLEtBRVAsZUFBZ0IsVUFDaEIsVUFBVyxLQUNYLE1BQU8sUUFwRVIsbUJBQW9CLDJCQUNuQixNQUFPLEtBQ1AsUUFBUyxNQUNULFdBQVksT0FDWixNQUFPLEtBR1IsZ0JBQ0MsY0FBZSxFQUdoQixxQkFDQyxjQUFlLElBR2hCLHNCQUNDLE1BQU8sS0FDUCxRQUFTLEdBQ1QsUUFBUyxNQUlWLHdCQURBLHVCQUtDLFFBQVMsSUFBQSxLQU1WLHVCQUNDLFlBQWEsSUFDYixNQUFPLElBQ1AsYUFBYyxNQUFBLE1BQUEsS0FFZix3QkFDQyxhQUFjLEVBQ2QsTUFBTyxJQUNQLFlBQWEsTUFBQSxNQUFBLEtBQ2IsUUFBUyxZQUNULFFBQVMsWUFDVCxRQUFTLGFBQ1QsUUFBUyxLQUdWLDBCQUNDLGFBQWMsS0FHZiwrQ0FDQyxhQUFjLEVBR2Ysd0JBQ0MsV0FBWSxPQUNaLGFBQWMsS0FDZCxVQUFXLE1BR1osOEJBQStCLDZCQUk5QixRQUFTLElBQUEsS0FLVCxhQUFjLEVBQ2QsTUFBTyxJQUNQLFlBQWEsTUFBQSxNQUFBLEtBQ2IsUUFBUyxZQUNULFFBQW9CLFlBQ3BCLFFBQXFCLGFBQ3JCLFFBQWEsS0FHZCxvQ0FBcUMsbUNBQ3BDLE1BQU8sS0FDUCxVQUFXLE1BQ1gsV0FBWSxLQUNaLFdBQVksY0FDWixXQUFZLE9BR2Isc0NBQ0MsUUFBUyxlQURWLG9EQUlFLFFBQVMsS0FDVCxVQUFXLEtBQ1gsWUFBYSxLQUNiLGdCQUFpQixTQUNqQixVQUFXLE1BUmIscUVBV0csT0FBUSIsImZpbGUiOiJzdHlsZS5taW4uY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLnJlZXBheS1sb2dvcyB7XG4gIC8qIGRpc3BsYXk6IHRhYmxlLWNlbGw7ICovXG59XG5cbi5yZWVwYXktbG9nbyB7XG4gIC8qIGZsb2F0OiBsZWZ0OyAqL1xuICAvKiBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7ICovXG4gIC8qIHBhZGRpbmc6IDVweDsgKi9cbn1cbiAgXG4ucmVlcGF5LWFkbWluLXNlY3Rpb24tbGktaGVhZGVyIHtcblx0d2lkdGg6IDEwMCU7XG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4ucmVlcGF5LWFkbWluLXNlY3Rpb24tbGktaGVhZGVyLXNtYWxsIHtcblx0d2lkdGg6IDEwMCU7XG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xuXHRmb250LXNpemU6IHNtYWxsO1xuXHRtYXJnaW4tYm90dG9tOiAwcHg7XG59XG5cbi5yZWVwYXktYWRtaW4tc2VjdGlvbi1saSB7XG5cdHdpZHRoOiAxMDAlO1xufVxuXG4ucmVlcGF5LWFkbWluLXNlY3Rpb24tbGktc21hbGwge1xuXHR3aWR0aDogMTAwJTtcblx0Zm9udC1zaXplOiBzbWFsbDtcblx0bWFyZ2luLXRvcDogMHB4O1xufVxuXG4ucmVlcGF5LWZ1bGwtd2lkdGgsIC5yZWVwYXktZnVsbC13aWR0aCAuYnV0dG9uIHtcblx0d2lkdGg6IDEwMCU7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdGNsZWFyOiBib3RoO1xufVxuXG4ucmVlcGF5LWJhbGFuY2Uge1xuXHRtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4ucmVlcGF5LWJhbGFuY2UubGFzdCB7XG5cdG1hcmdpbi1ib3R0b206IDVweDtcbn1cblxuLnJlZXBheS1iYWxhbmNlOmFmdGVyIHtcblx0Y2xlYXI6IGJvdGg7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdGRpc3BsYXk6IHRhYmxlO1xufVxuXG4ucmVlcGF5LWJhbGFuY2VfX2xhYmVsLFxuLnJlZXBheS1iYWxhbmNlX19hbW91bnQge1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWY5O1xuXHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHRmbG9hdDogbGVmdDtcblx0cGFkZGluZzogN3B4IDEwcHg7XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGZvbnQtc2l6ZTogMTBweDtcblx0Y29sb3I6ICM4YThhOGE7XG59XG5cbi5yZWVwYXktYmFsYW5jZV9fbGFiZWwge1xuXHRmb250LXdlaWdodDogYm9sZDtcblx0d2lkdGg6IDYwJTtcblx0Ym9yZGVyLXJpZ2h0OiAyLjVweCBzb2xpZCAjRkZGO1xufVxuLnJlZXBheS1iYWxhbmNlX19hbW91bnQge1xuXHRib3JkZXItcmlnaHQ6IDA7XG5cdHdpZHRoOiA0MCU7XG5cdGJvcmRlci1sZWZ0OiAyLjVweCBzb2xpZCAjRkZGO1xuXHRkaXNwbGF5OiAtd2Via2l0LWJveDtcblx0ZGlzcGxheTogLW1zLWZsZXhib3g7XG5cdGRpc3BsYXk6IC13ZWJraXQtZmxleDtcblx0ZGlzcGxheTogZmxleDtcbn1cblxuLnJlZXBheS1iYWxhbmNlX19jdXJyZW5jeSB7XG5cdG1hcmdpbi1yaWdodDogMTBweDtcbn1cblxuLnJlZXBheS1iYWxhbmNlLmxhc3QgLnJlZXBheS1iYWxhbmNlX19jdXJyZW5jeSB7XG5cdG1hcmdpbi1yaWdodDogMDtcbn1cblxuLnJlZXBheS1hZG1pbi1jYXJkLWxvZ28ge1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7IFxuXHRtYXJnaW4tcmlnaHQ6IDI1cHg7XG5cdG1heC13aWR0aDogMTAwcHg7XG59XG5cbi5yZWVwYXktcGFydGx5X2NhcHR1cmVfYW1vdW50LCAucmVlcGF5LXBhcnRseV9yZWZ1bmRfYW1vdW50IHtcblx0YmFja2dyb3VuZC1jb2xvcjogI2Y5ZjlmOTtcblx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcblx0ZmxvYXQ6IGxlZnQ7XG5cdHBhZGRpbmc6IDRweCAxMHB4O1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRmb250LXNpemU6IDEwcHg7XG5cdGNvbG9yOiAjOGE4YThhO1xuXHRcblx0Ym9yZGVyLXJpZ2h0OiAwO1xuXHR3aWR0aDogNDAlO1xuXHRib3JkZXItbGVmdDogMi41cHggc29saWQgI0ZGRjtcblx0ZGlzcGxheTogLXdlYmtpdC1ib3g7ICAvKiBPTEQgLSBpT1MgNi0sIFNhZmFyaSAzLjEtNiwgQkI3ICovXG5cdGRpc3BsYXk6IC1tcy1mbGV4Ym94OyAgLyogVFdFRU5FUiAtIElFIDEwICovXG5cdGRpc3BsYXk6IC13ZWJraXQtZmxleDsgLyogTkVXIC0gU2FmYXJpIDYuMSsuIGlPUyA3LjErLCBCQjEwICovXG5cdGRpc3BsYXk6IGZsZXg7ICAgICAgICAgLyogTkVXLCBTcGVjIC0gRmlyZWZveCwgQ2hyb21lLCBPcGVyYSAqL1xufVxuXG4ucmVlcGF5LWNhcHR1cmVfcGFydGx5X2Ftb3VudC1maWVsZCwgLnJlZXBheS1yZWZ1bmRfcGFydGx5X2Ftb3VudC1maWVsZCB7XG5cdHdpZHRoOiA5MHB4O1xuXHRmb250LXNpemU6IHNtYWxsO1xuXHRtYXgtaGVpZ2h0OiAyMHB4O1xuXHRtaW4taGVpZ2h0OiAxcHggIWltcG9ydGFudDtcblx0dGV4dC1hbGlnbjogY2VudGVyOyBcbn1cblxuI3BheW1lbnQgLndjX3BheW1lbnRfbWV0aG9kcyBsaSBsYWJlbCB7XG5cdGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcblxuXHQucmVlcGF5LWxvZ29zIHtcblx0XHRkaXNwbGF5OiBmbGV4O1xuXHRcdGZsZXgtd3JhcDogd3JhcDtcblx0XHRtYXJnaW4tbGVmdDogYXV0bztcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuXHRcdG1heC13aWR0aDogMzAwcHg7XG5cblx0XHQucmVlcGF5LWxvZ28gaW1nIHtcblx0XHRcdG1hcmdpbjogLjI1cmVtO1xuXHRcdH1cblx0fVxufVxuIl19 */ diff --git a/assets/css/style.scss b/assets/css/style.scss index b769c1fd..1d226fa8 100755 --- a/assets/css/style.scss +++ b/assets/css/style.scss @@ -91,7 +91,7 @@ max-width: 100px; } -.reepay-partly_capture_amount { +.reepay-partly_capture_amount, .reepay-partly_refund_amount { background-color: #f9f9f9; box-sizing: border-box; float: left; @@ -109,10 +109,26 @@ display: flex; /* NEW, Spec - Firefox, Chrome, Opera */ } -.reepay-capture_partly_amount-field { +.reepay-capture_partly_amount-field, .reepay-refund_partly_amount-field { width: 90px; font-size: small; max-height: 20px; min-height: 1px !important; text-align: center; -} \ No newline at end of file +} + +#payment .wc_payment_methods li label { + display: flex !important; + + .reepay-logos { + display: flex; + flex-wrap: wrap; + margin-left: auto; + justify-content: flex-end; + max-width: 300px; + + .reepay-logo img { + margin: .25rem; + } + } +} diff --git a/assets/js/jquery.inputmask.min.js b/assets/js/jquery.inputmask.min.js index 85e296a4..352e54d3 100644 --- a/assets/js/jquery.inputmask.min.js +++ b/assets/js/jquery.inputmask.min.js @@ -1,2 +1,2 @@ -!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("jquery"));else if("function"==typeof define&&define.amd)define(["jquery"],t);else{var i="object"==typeof exports?t(require("jquery")):t(e.jQuery);for(var n in i)("object"==typeof exports?exports:e)[n]=i[n]}}(window,function(__WEBPACK_EXTERNAL_MODULE__3__){return modules=[function(e){e.exports=JSON.parse('{"BACKSPACE":8,"BACKSPACE_SAFARI":127,"DELETE":46,"DOWN":40,"END":35,"ENTER":13,"ESCAPE":27,"HOME":36,"INSERT":45,"LEFT":37,"PAGE_DOWN":34,"PAGE_UP":33,"RIGHT":39,"SPACE":32,"TAB":9,"UP":38,"X":88,"CONTROL":17}')},function(e,t,i){"use strict";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)}var a=i(2),r=i(4),o=r.document,s=i(5).generateMaskSet,u=i(5).analyseMask,l=i(8);function c(e,t,i){if(!(this instanceof c))return new c(e,t,i);this.el=void 0,this.events={},this.maskset=void 0,this.refreshValue=!1,!0!==i&&(a.isPlainObject(e)?t=e:(t=t||{},e&&(t.alias=e)),this.opts=a.extend(!0,{},this.defaults,t),this.noMasksCache=t&&void 0!==t.definitions,this.userOptions=t||{},p(this.opts.alias,t,this.opts),this.isRTL=this.opts.numericInput)}function p(e,t,i){var n=c.prototype.aliases[e];return n?(n.alias&&p(n.alias,void 0,i),a.extend(!0,i,n),a.extend(!0,i,t),!0):(null===i.mask&&(i.mask=e),!1)}c.prototype={dataAttribute:"data-inputmask",defaults:{_maxTestPos:500,placeholder:"_",optionalmarker:["[","]"],quantifiermarker:["{","}"],groupmarker:["(",")"],alternatormarker:"|",escapeChar:"\\",mask:null,regex:null,oncomplete:a.noop,onincomplete:a.noop,oncleared:a.noop,repeat:0,greedy:!1,autoUnmask:!1,removeMaskOnSubmit:!1,clearMaskOnLostFocus:!0,insertMode:!0,insertModeVisual:!0,clearIncomplete:!1,alias:null,onKeyDown:a.noop,onBeforeMask:null,onBeforePaste:function(e,t){return a.isFunction(t.onBeforeMask)?t.onBeforeMask.call(this,e,t):e},onBeforeWrite:null,onUnMask:null,showMaskOnFocus:!0,showMaskOnHover:!0,onKeyValidation:a.noop,skipOptionalPartCharacter:" ",numericInput:!1,rightAlign:!1,undoOnEscape:!0,radixPoint:"",_radixDance:!1,groupSeparator:"",keepStatic:null,positionCaretOnTab:!0,tabThrough:!1,supportsInputType:["text","tel","url","password","search"],ignorables:[8,9,19,27,33,34,35,36,37,38,39,40,45,46,93,112,113,114,115,116,117,118,119,120,121,122,123,0,229],isComplete:null,preValidation:null,postValidation:null,staticDefinitionSymbol:void 0,jitMasking:!1,nullable:!0,inputEventOnly:!1,noValuePatching:!1,positionCaretOnClick:"lvp",casing:null,inputmode:"text",importDataAttributes:!0,shiftPositions:!0},definitions:{9:{validator:"[0-91-9]",definitionSymbol:"*"},a:{validator:"[A-Za-zА-яЁёÀ-ÿµ]",definitionSymbol:"*"},"*":{validator:"[0-91-9A-Za-zА-яЁёÀ-ÿµ]"}},aliases:{},masksCache:{},mask:function(e){var t=this;return"string"==typeof e&&(e=o.getElementById(e)||o.querySelectorAll(e)),e=e.nodeName?[e]:e,a.each(e,function(e,i){var n=a.extend(!0,{},t.opts);if(function(e,t,i,n){function o(t,a){null!==(a=void 0!==a?a:e.getAttribute(n+"-"+t))&&("string"==typeof a&&(0===t.indexOf("on")?a=r[a]:"false"===a?a=!1:"true"===a&&(a=!0)),i[t]=a)}if(!0===t.importDataAttributes){var s,u,l,c,f=e.getAttribute(n);if(f&&""!==f&&(f=f.replace(/'/g,'"'),u=JSON.parse("{"+f+"}")),u)for(c in l=void 0,u)if("alias"===c.toLowerCase()){l=u[c];break}for(s in o("alias",l),i.alias&&p(i.alias,i,t),t){if(u)for(c in l=void 0,u)if(c.toLowerCase()===s.toLowerCase()){l=u[c];break}o(s,l)}}return a.extend(!0,t,i),"rtl"!==e.dir&&!t.rightAlign||(e.style.textAlign="right"),"rtl"!==e.dir&&!t.numericInput||(e.dir="ltr",e.removeAttribute("dir"),t.isRTL=!0),Object.keys(i).length}(i,n,a.extend(!0,{},t.userOptions),t.dataAttribute)){var o=s(n,t.noMasksCache);void 0!==o&&(void 0!==i.inputmask&&(i.inputmask.opts.autoUnmask=!0,i.inputmask.remove()),i.inputmask=new c(void 0,void 0,!0),i.inputmask.opts=n,i.inputmask.noMasksCache=t.noMasksCache,i.inputmask.userOptions=a.extend(!0,{},t.userOptions),i.inputmask.isRTL=n.isRTL||n.numericInput,i.inputmask.el=i,i.inputmask.maskset=o,a.data(i,"_inputmask_opts",n),l.call(i.inputmask,{action:"mask"}))}}),e&&e[0]&&e[0].inputmask||this},option:function(e,t){return"string"==typeof e?this.opts[e]:"object"===n(e)?(a.extend(this.userOptions,e),this.el&&!0!==t&&this.mask(this.el),this):void 0},unmaskedvalue:function(e){return this.maskset=this.maskset||s(this.opts,this.noMasksCache),l.call(this,{action:"unmaskedvalue",value:e})},remove:function(){return l.call(this,{action:"remove"})},getemptymask:function(){return this.maskset=this.maskset||s(this.opts,this.noMasksCache),l.call(this,{action:"getemptymask"})},hasMaskedValue:function(){return!this.opts.autoUnmask},isComplete:function(){return this.maskset=this.maskset||s(this.opts,this.noMasksCache),l.call(this,{action:"isComplete"})},getmetadata:function(){return this.maskset=this.maskset||s(this.opts,this.noMasksCache),l.call(this,{action:"getmetadata"})},isValid:function(e){return this.maskset=this.maskset||s(this.opts,this.noMasksCache),l.call(this,{action:"isValid",value:e})},format:function(e,t){return this.maskset=this.maskset||s(this.opts,this.noMasksCache),l.call(this,{action:"format",value:e,metadata:t})},setValue:function(e){this.el&&a(this.el).trigger("setvalue",[e])},analyseMask:u},c.extendDefaults=function(e){a.extend(!0,c.prototype.defaults,e)},c.extendDefinitions=function(e){a.extend(!0,c.prototype.definitions,e)},c.extendAliases=function(e){a.extend(!0,c.prototype.aliases,e)},c.format=function(e,t,i){return c(t).format(e,i)},c.unmask=function(e,t){return c(t).unmaskedvalue(e)},c.isValid=function(e,t){return c(t).isValid(e)},c.remove=function(e){"string"==typeof e&&(e=o.getElementById(e)||o.querySelectorAll(e)),e=e.nodeName?[e]:e,a.each(e,function(e,t){t.inputmask&&t.inputmask.remove()})},c.setValue=function(e,t){"string"==typeof e&&(e=o.getElementById(e)||o.querySelectorAll(e)),e=e.nodeName?[e]:e,a.each(e,function(e,i){i.inputmask?i.inputmask.setValue(t):a(i).trigger("setvalue",[t])})};var f=new RegExp("(\\"+["/",".","*","+","?","|","(",")","[","]","{","}","\\","$","^"].join("|\\")+")","gim");c.escapeRegex=function(e){return e.replace(f,"\\$1")},c.dependencyLib=a,r.Inputmask=c,e.exports=c},function(e,t,i){"use strict";var n=i(3);if(void 0===n)throw"jQuery not loaded!";e.exports=n},function(e,t){e.exports=__WEBPACK_EXTERNAL_MODULE__3__},function(module,exports,__webpack_require__){"use strict";var __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(e){return(_typeof="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)}__WEBPACK_AMD_DEFINE_RESULT__=function(){return"undefined"!=typeof window?window:new(eval("require('jsdom').JSDOM"))("").window}.call(exports,__webpack_require__,exports,module),void 0===__WEBPACK_AMD_DEFINE_RESULT__||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__)},function(e,t,i){"use strict";var n=i(2);e.exports={generateMaskSet:function(e,t){function i(e,i,a){var r,o,s=!1;if(null!==e&&""!==e||(e=(s=null!==a.regex)?(e=a.regex).replace(/^(\^)(.*)(\$)$/,"$2"):(s=!0,".*")),1===e.length&&!1===a.greedy&&0!==a.repeat&&(a.placeholder=""),0t.alternation)for(var a=t.alternation;as._maxTestPos&&void 0!==h)throw"Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. "+i.mask;if(u===e&&void 0===o.matches)return c.push({match:o,locator:l.reverse(),cd:f,mloc:{}}),!0;if(void 0!==o.matches){if(o.isGroup&&h!==o){if(o=m(t.matches[a.inArray(o,t.matches)+1],l,h))return!0}else if(o.isOptional){var _=o,S=c.length;if(o=d(o,n,l,h)){if(a.each(c,function(e,t){S<=e&&(t.match.optionality=!0)}),r=c[c.length-1].match,void 0!==h||!v(r,_))return!0;p=!0,u=e}}else if(o.isAlternator){var P,w=o,E=[],M=c.slice(),A=l.length,O=0=s.keepStatic)&&(F=F.slice(0,1));for(var L=!1,N=0;N=U.quantifier.min,r.jit=(z||1)*Q.matches.indexOf(r)>=U.quantifier.jit,r.optionalQuantifier&&v(r,Q)){p=!0,u=e;break}return r.jit&&(i.jitOffset[e]=Q.matches.length-Q.matches.indexOf(r)),!0}}else if(o=d(o,n,l,h))return!0}else u++;var W,$}for(var h=0u.end&&(v=u.end,g=u.begin)),-1===_&&void 0===o)c=(f=j(l=0)).alternation;else for(;0<=_;_--)if((p=i.validPositions[_])&&void 0!==p.alternation){if(f&&f.locator[p.alternation]!==p.locator[p.alternation])break;l=_,c=i.validPositions[l].alternation,f=p}if(void 0!==c){h=parseInt(l),i.excludes[h]=i.excludes[h]||[],!0!==e&&i.excludes[h].push(A(f)+":"+f.alternation);var S=[],P=-1;for(d=h;dc){var b=!1;if(i.jitOffset[c]&&void 0===i.validPositions[U(c)]&&(!1!==(d=V(c+i.jitOffset[c],t,!0))&&(!0!==o&&(d.caret=c),b=!0)),e.end>c&&(i.validPositions[c]=void 0),!b&&!q(c,s.keepStatic))for(var x=c+1,_=U(c);x<=_;x++)if(!1!==(d=f(x,t,n))){d=H(c,void 0!==d.pos?d.pos:x)||d,c=x;break}}}else d={caret:U(c)}}}else d=!1;!1!==d||!s.keepStatic||!oe(I())&&0!==c||n||!0===o?l(e)&&i.tests[c]&&1e+1?t[e+1]&&!0===t[e+1].match.static&&t[e+1]:t[e+1];return a&&r}var u=0,l=void 0!==e.begin?e.begin:e,c=void 0!==e.end?e.end:e;if(e.begin>e.end&&(l=e.end,c=e.begin),r=void 0!==r?r:l,l!==c||s.insertMode&&void 0!==i.validPositions[r]&&void 0===n||void 0===t){var p,f=a.extend(!0,{},i.validPositions),d=M(void 0,!0);for(i.p=l,p=d;l<=p;p--)delete i.validPositions[p],void 0===t&&delete i.tests[p+1];var m,h,v=!0,g=r,k=g;for(t&&(i.validPositions[r]=a.extend(!0,{},t),k++,g++),p=t?c:c-1;p<=d;p++){if(void 0!==(m=f[p])&&!0!==m.generatedInput&&(c<=p||l<=p&&o(p,f,{begin:l,end:c}))){for(;""!==j(k).match.def;){if(!1!==(h=F(k,m,s))||"+"===m.match.def){"+"===m.match.def&&I(!0);var y=V(k,m.input,"+"!==m.match.def,"+"!==m.match.def);if(v=!1!==y,g=(y.pos||k)+1,!v&&h)break}else v=!1;if(v){void 0===t&&m.match.static&&p===e.begin&&u++;break}if(!v&&k>i.maskLength)break;k++}""==j(k).match.def&&(v=!1),k=g}if(!v)break}if(!v)return i.validPositions=a.extend(!0,{},f),E(!0),!1}else t&&j(r).match.cd===t.match.cd&&(i.validPositions[r]=a.extend(!0,{},t));return E(!0),u}function q(e,t,n){var a=C(e).match;if(""===a.def&&(a=j(e).match),!0!==a.static)return a.fn;if(!0===n&&void 0!==i.validPositions[e]&&!0!==i.validPositions[e].generatedInput)return!0;if(!0!==t&&-11+(""===r[r.length-1].match.def?1:0)}var o=D(e,T(e)),s=W(e,o.match);return o.match.def!==s}return!1}function U(e,t,i){void 0===i&&(i=!0);for(var n=e+1;""!==j(n).match.def&&(!0===t&&(!0!==j(n).match.newBlockMarker||!q(n,void 0,!0))||!0!==t&&!q(n,void 0,i));)n++;return n}function z(e,t){var i,n=e;if(n<=0)return 0;for(;0<--n&&(!0===t&&!0!==j(n).match.newBlockMarker||!0!==t&&!q(n,void 0,!0)&&((i=T(n)).length<2||2===i.length&&""===i[1].match.def)););return n}function Q(e,t,i,n,r){if(n&&a.isFunction(s.onBeforeWrite)){var o=s.onBeforeWrite.call(v,n,t,i,s);if(o){if(o.refreshFromBuffer){var u=o.refreshFromBuffer;B(!0===u?u:u.start,u.end,o.buffer||t),t=I(!0)}void 0!==i&&(i=void 0!==o.caret?o.caret:i)}}if(void 0!==e&&(e.inputmask._valueSet(t.join("")),void 0===i||void 0!==n&&"blur"===n.type||ne(e,i,void 0,void 0,void 0!==n&&"keydown"===n.type&&(n.keyCode===f.DELETE||n.keyCode===f.BACKSPACE)),!0===r)){var l=a(e),c=e.inputmask._valueGet();b=!0,l.trigger("input"),setTimeout(function(){c===R().join("")?l.trigger("cleared"):!0===oe(t)&&l.trigger("complete")},0)}}function W(e,t,n){if(void 0!==(t=t||j(e).match).placeholder||!0===n)return a.isFunction(t.placeholder)?t.placeholder(s):t.placeholder;if(!0!==t.static)return s.placeholder.charAt(e%s.placeholder.length);if(-11+(""===o[o.length-1].match.def?1:0))for(var l=0;l=l.length?o.length:l.length,f=u.length>=c.length?u.length:c.length,d="",m=[];o.lengthe.scrollWidth?c:0,e.inputmask.caretPos={begin:t,end:i},s.insertModeVisual&&!1===s.insertMode&&t===i&&(u||i++),e===(e.inputmask.shadowRoot||o).activeElement)if("setSelectionRange"in e)e.setSelectionRange(t,i);else if(r.getSelection){if(l=o.createRange(),void 0===e.firstChild||null===e.firstChild){var p=o.createTextNode("");e.appendChild(p)}l.setStart(e.firstChild,t=I().length&&l>=n.end&&(n.end=l+1),t===f.BACKSPACE?n.end-n.begin<1&&(n.begin=z(n.begin)):t===f.DELETE&&n.begin===n.end&&(n.end=q(n.end,!0,!0)?n.end+1:U(n.end)+1),!1!==(u=K(n))){if(!0!==a&&!1!==s.keepStatic||null!==s.regex&&-1!==j(n.begin).match.def.indexOf("|")){var c=G(!0);if(c){var p=void 0!==c.caret?c.caret:c.pos?U(c.pos.begin?c.pos.begin:c.pos):M(-1,!0);(t!==f.DELETE||n.begin>p)&&n.begin}}!0!==a&&(i.p=t===f.DELETE?n.begin+u:n.begin)}}function ue(e,t){e.inputmask.refreshValue=!1,a.isFunction(s.onBeforeMask)&&(t=s.onBeforeMask.call(v,t,s)||t),ee(e,!0,!1,t=t.toString().split("")),d=I().join(""),(s.clearMaskOnLostFocus||s.clearIncomplete)&&e.inputmask._valueGet()===R().join("")&&-1===M()&&e.inputmask._valueSet("")}if(void 0!==t)switch(t.action){case"isComplete":return g=t.el,oe(I());case"unmaskedvalue":return void 0!==g&&void 0===t.value||(J=t.value,J=(a.isFunction(s.onBeforeMask)&&s.onBeforeMask.call(v,J,s)||J).split(""),ee.call(this,void 0,!1,!1,J),a.isFunction(s.onBeforeWrite)&&s.onBeforeWrite.call(v,void 0,I(),0,s)),te(g);case"mask":!function(e){Y.off(e);var t=function(e,t){"textarea"!==e.tagName.toLowerCase()&&t.ignorables.push(f.ENTER);var i=e.getAttribute("type"),r="input"===e.tagName.toLowerCase()&&-1!==a.inArray(i,t.supportsInputType)||e.isContentEditable||"textarea"===e.tagName.toLowerCase();if(!r)if("input"===e.tagName.toLowerCase()){var s=o.createElement("input");s.setAttribute("type",i),r="text"===s.type,s=null}else r="partial";return!1!==r?function(e){var i,r;function s(){return this.inputmask?this.inputmask.opts.autoUnmask?this.inputmask.unmaskedvalue():-1!==M()||!0!==t.nullable?(this.inputmask.shadowRoot||o.activeElement)===this&&t.clearMaskOnLostFocus?(k?re(I().slice()).reverse():re(I().slice())).join(""):i.call(this):"":i.call(this)}function u(e){r.call(this,e),this.inputmask&&ue(this,e)}if(!e.inputmask.__valueGet){if(!0!==t.noValuePatching){if(Object.getOwnPropertyDescriptor){"function"!=typeof Object.getPrototypeOf&&(Object.getPrototypeOf="object"===n("test".__proto__)?function(e){return e.__proto__}:function(e){return e.constructor.prototype});var l=Object.getPrototypeOf?Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e),"value"):void 0;l&&l.get&&l.set?(i=l.get,r=l.set,Object.defineProperty(e,"value",{get:s,set:u,configurable:!0})):"input"!==e.tagName.toLowerCase()&&(i=function(){return this.textContent},r=function(e){this.textContent=e},Object.defineProperty(e,"value",{get:s,set:u,configurable:!0}))}else o.__lookupGetter__&&e.__lookupGetter__("value")&&(i=e.__lookupGetter__("value"),r=e.__lookupSetter__("value"),e.__defineGetter__("value",s),e.__defineSetter__("value",u));e.inputmask.__valueGet=i,e.inputmask.__valueSet=r}e.inputmask._valueGet=function(e){return k&&!0!==e?i.call(this.el).split("").reverse().join(""):i.call(this.el)},e.inputmask._valueSet=function(e,t){r.call(this.el,null==e?"":!0!==t&&k?e.split("").reverse().join(""):e)},void 0===i&&(i=function(){return this.value},r=function(e){this.value=e},function(e){if(a.valHooks&&(void 0===a.valHooks[e]||!0!==a.valHooks[e].inputmaskpatch)){var i=a.valHooks[e]&&a.valHooks[e].get?a.valHooks[e].get:function(e){return e.value},n=a.valHooks[e]&&a.valHooks[e].set?a.valHooks[e].set:function(e,t){return e.value=t,e};a.valHooks[e]={get:function(e){if(e.inputmask){if(e.inputmask.opts.autoUnmask)return e.inputmask.unmaskedvalue();var n=i(e);return-1!==M(void 0,void 0,e.inputmask.maskset.validPositions)||!0!==t.nullable?n:""}return i(e)},set:function(e,t){var i=n(e,t);return e.inputmask&&ue(e,t),i},inputmaskpatch:!0}}}(e.type),function(e){Y.on(e,"mouseenter",function(){var e=this.inputmask._valueGet(!0);e!==(k?I().reverse():I()).join("")&&ue(this,e)})}(e))}}(e):e.inputmask=void 0,r}(e,s);if(!1!==t){m=a(g=e),P=g.placeholder,-1===(h=void 0!==g?g.maxLength:void 0)&&(h=void 0),"inputMode"in g&&null===g.getAttribute("inputmode")&&(g.inputMode=s.inputmode,g.setAttribute("inputmode",s.inputmode)),!0===t&&(s.showMaskOnFocus=s.showMaskOnFocus&&-1===["cc-number","cc-exp"].indexOf(g.autocomplete),p&&(s.insertModeVisual=!1),Y.on(g,"submit",X.submitEvent),Y.on(g,"reset",X.resetEvent),Y.on(g,"blur",X.blurEvent),Y.on(g,"focus",X.focusEvent),Y.on(g,"invalid",X.invalidEvent),Y.on(g,"click",X.clickEvent),Y.on(g,"mouseleave",X.mouseleaveEvent),Y.on(g,"mouseenter",X.mouseenterEvent),Y.on(g,"paste",X.pasteEvent),Y.on(g,"cut",X.cutEvent),Y.on(g,"complete",s.oncomplete),Y.on(g,"incomplete",s.onincomplete),Y.on(g,"cleared",s.oncleared),l||!0===s.inputEventOnly?g.removeAttribute("maxLength"):(Y.on(g,"keydown",X.keydownEvent),Y.on(g,"keypress",X.keypressEvent)),Y.on(g,"input",X.inputFallBackEvent),Y.on(g,"compositionend",X.compositionendEvent)),Y.on(g,"setvalue",X.setValueEvent),d=R().join("");var i=(g.inputmask.shadowRoot||o).activeElement;if(""!==g.inputmask._valueGet(!0)||!1===s.clearMaskOnLostFocus||i===g){ue(g,g.inputmask._valueGet(!0));var r=I().slice();!1===oe(r)&&s.clearIncomplete&&E(),s.clearMaskOnLostFocus&&i!==g&&(-1===M()?r=[]:re(r)),(!1===s.clearMaskOnLostFocus||s.showMaskOnFocus&&i===g||""!==g.inputmask._valueGet(!0))&&Q(g,r),i===g&&ne(g,U(M()))}}}(g);break;case"format":return J=(a.isFunction(s.onBeforeMask)&&s.onBeforeMask.call(v,t.value,s)||t.value).split(""),ee.call(this,void 0,!0,!1,J),t.metadata?{value:k?I().slice().reverse().join(""):I().join(""),metadata:e.call(this,{action:"getmetadata"},i,s)}:k?I().slice().reverse().join(""):I().join("");case"isValid":t.value?(J=(a.isFunction(s.onBeforeMask)&&s.onBeforeMask.call(v,t.value,s)||t.value).split(""),ee.call(this,void 0,!0,!1,J)):t.value=k?I().slice().reverse().join(""):I().join("");for(var le=I(),ce=ae(),pe=le.length-1;ce=e.day)&&t}(m,f))&&function(e,t){var i=!0;if(t.min){if(e.rawyear){var n=e.rawyear.replace(/[^0-9]/g,"");i=t.min.year.substr(0,n.length)<=n}e.year===e.rawyear&&t.min.date.getTime()==t.min.date.getTime()&&(i=t.min.date.getTime()<=e.date.getTime())}return i&&t.max&&t.max.date.getTime()==t.max.date.getTime()&&(i=t.max.date.getTime()>=e.date.getTime()),i}(m,a)),t&&f&&n.pos!==t?{buffer:p(a.inputFormat,m,a).split(""),refreshFromBuffer:{start:t,end:n.pos}}:f},onKeyDown:function(e,t,i,n){e.ctrlKey&&e.keyCode===o.RIGHT&&(this.inputmask._valueSet(m(new Date,n)),r(this).trigger("setvalue"))},onUnMask:function(e,t,i){return t?p(i.outputFormat,d(e,i.inputFormat,i),i,!0):t},casing:function(e,t,i,n){return 0==t.nativeDef.indexOf("[ap]")?e.toLowerCase():0==t.nativeDef.indexOf("[AP]")?e.toUpperCase():e},onBeforeMask:function(e,t){return"[object Date]"===Object.prototype.toString.call(e)&&(e=m(e,t)),e},insertMode:!1,shiftPositions:!1,keepStatic:!1,inputmode:"numeric"}}),e.exports=a},function(e,t,i){"use strict";var n=i(1),a=n.dependencyLib,r=i(0);function o(e,t){for(var i="",a=0;am&&s.end<=m)return i===r.radixPoint?{insert:{pos:m+1,c:"0",fromIsValid:!0},rewritePosition:m}:{rewritePosition:m+1};if(s.begin=r.min.toString().length||u<0))return!1;if(null!==r.max&&u>r.max)return!1}return n},onUnMask:function(e,t,i){if(""===t&&!0===i.nullable)return t;var a=e.replace(i.prefix,"");return a=(a=a.replace(i.suffix,"")).replace(new RegExp(n.escapeRegex(i.groupSeparator),"g"),""),""!==i.placeholder.charAt(0)&&(a=a.replace(new RegExp(i.placeholder.charAt(0),"g"),"0")),i.unmaskAsNumber?(""!==i.radixPoint&&-1!==a.indexOf(i.radixPoint)&&(a=a.replace(n.escapeRegex.call(this,i.radixPoint),".")),a=(a=a.replace(new RegExp("^"+n.escapeRegex(i.negationSymbol.front)),"-")).replace(new RegExp(n.escapeRegex(i.negationSymbol.back)+"$"),""),Number(a)):a},isComplete:function(e,t){var i=(t.numericInput?e.slice().reverse():e).join("");return i=(i=(i=(i=(i=i.replace(new RegExp("^"+n.escapeRegex(t.negationSymbol.front)),"-")).replace(new RegExp(n.escapeRegex(t.negationSymbol.back)+"$"),"")).replace(t.prefix,"")).replace(t.suffix,"")).replace(new RegExp(n.escapeRegex(t.groupSeparator)+"([0-9]{3})","g"),"$1"),","===t.radixPoint&&(i=i.replace(n.escapeRegex(t.radixPoint),".")),isFinite(i)},onBeforeMask:function(e,t){var i=t.radixPoint||",";isFinite(t.digits)&&(t.digits=parseInt(t.digits)),"number"!=typeof e&&"number"!==t.inputType||""===i||(e=e.toString().replace(".",i));var a=e.split(i),r=a[0].replace(/[^\-0-9]/g,""),o=1t.max&&(e=t.max.toString().replace(".",i))}return s(e.toString().split(""),l,t,u).join("")},onBeforeWrite:function(e,t,i,r){function o(e,t){if(!1!==r.__financeInput||t){var i=a.inArray(r.radixPoint,e);-1!==i&&e.splice(i,1)}if(""!==r.groupSeparator)for(;-1!==(i=e.indexOf(r.groupSeparator));)e.splice(i,1);return e}var u,l=function(e,t){var i=new RegExp("(^"+(""!==t.negationSymbol.front?n.escapeRegex(t.negationSymbol.front)+"?":"")+n.escapeRegex(t.prefix)+")(.*)("+n.escapeRegex(t.suffix)+(""!=t.negationSymbol.back?n.escapeRegex(t.negationSymbol.back)+"?":"")+"$)").exec(e.slice().reverse().join("")),a=i?i[2]:"",r=!1;return a&&(a=a.split(t.radixPoint.charAt(0))[0],r=new RegExp("^[0"+t.groupSeparator+"]*").exec(a)),!(!r||!(1=o.length?o.length:i.begin]),!1}else if(-1!==l&&(i.begin=o.length?l+1:i.begin]),!1}}}},currency:{prefix:"",groupSeparator:",",alias:"numeric",digits:2,digitsOptional:!1},decimal:{alias:"numeric"},integer:{alias:"numeric",digits:0},percentage:{alias:"numeric",min:0,max:100,suffix:" %",digits:0,allowMinus:!1},indianns:{alias:"numeric",_mask:function(e){return"("+e.groupSeparator+"99){*|1}("+e.groupSeparator+"999){1|1}"},groupSeparator:",",radixPoint:".",placeholder:"0",digits:2,digitsOptional:!1}}),e.exports=n},function(e,t,i){"use strict";var n,a=(n=i(1))&&n.__esModule?n:{default:n};function r(e){return(r="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 o(e,t){return!t||"object"!==r(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function s(e){var t="function"==typeof Map?new Map:void 0;return(s=function(e){if(null===e||(i=e,-1===Function.toString.call(i).indexOf("[native code]")))return e;var i;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return u(e,arguments,c(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),l(n,e)})(e)}function u(e,t,i){return(u=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}()?Reflect.construct:function(e,t,i){var n=[null];n.push.apply(n,t);var a=new(Function.bind.apply(e,n));return i&&l(a,i.prototype),a}).apply(null,arguments)}function l(e,t){return(l=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function c(e){return(c=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}if(document.head.createShadowRoot||document.head.attachShadow){var p=function(e){function t(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=(e=o(this,c(t).call(this))).getAttributeNames(),n=e.attachShadow({mode:"closed"}),r=document.createElement("input");for(var s in r.type="text",n.appendChild(r),i)Object.prototype.hasOwnProperty.call(i,s)&&r.setAttribute("data-inputmask-"+i[s],e.getAttribute(i[s]));return(new a.default).mask(r),r.inputmask.shadowRoot=n,e}return 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&&l(e,t)}(t,s(HTMLElement)),t}();customElements.define("input-mask",p)}},function(e,t,i){"use strict";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)}var a=i(3),r=i(1);void 0===a.fn.inputmask&&(a.fn.inputmask=function(e,t){var i,o=this[0];if(void 0===t&&(t={}),"string"==typeof e)switch(e){case"unmaskedvalue":return o&&o.inputmask?o.inputmask.unmaskedvalue():a(o).val();case"remove":return this.each(function(){this.inputmask&&this.inputmask.remove()});case"getemptymask":return o&&o.inputmask?o.inputmask.getemptymask():"";case"hasMaskedValue":return!(!o||!o.inputmask)&&o.inputmask.hasMaskedValue();case"isComplete":return!o||!o.inputmask||o.inputmask.isComplete();case"getmetadata":return o&&o.inputmask?o.inputmask.getmetadata():void 0;case"setvalue":r.setValue(o,t);break;case"option":if("string"!=typeof t)return this.each(function(){if(void 0!==this.inputmask)return this.inputmask.option(t)});if(o&&void 0!==o.inputmask)return o.inputmask.option(t);break;default:return t.alias=e,i=new r(t),this.each(function(){i.mask(this)})}else{if(Array.isArray(e))return t.alias=e,i=new r(t),this.each(function(){i.mask(this)});if("object"==n(e))return i=new r(e),void 0===e.mask&&void 0===e.alias?this.each(function(){if(void 0!==this.inputmask)return this.inputmask.option(e);i.mask(this)}):this.each(function(){i.mask(this)});if(void 0===e)return this.each(function(){(i=new r(t)).mask(this)})}})},function(e,t,i){"use strict";var n=i(6),a=i(3);n.dependencyLib===a&&i(12),e.exports=n}],installedModules={},__webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(e,t,i){__webpack_require__.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},__webpack_require__.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},__webpack_require__.t=function(e,t){if(1&t&&(e=__webpack_require__(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(__webpack_require__.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)__webpack_require__.d(i,n,function(t){return e[t]}.bind(null,n));return i},__webpack_require__.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return __webpack_require__.d(t,"a",t),t},__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=13);function __webpack_require__(e){if(installedModules[e])return installedModules[e].exports;var t=installedModules[e]={i:e,l:!1,exports:{}};return modules[e].call(t.exports,t,t.exports,__webpack_require__),t.l=!0,t.exports}var modules,installedModules}); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5pbnB1dG1hc2suanMiXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwicmVxdWlyZSIsImRlZmluZSIsImFtZCIsImEiLCJqUXVlcnkiLCJpIiwid2luZG93IiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fM19fIiwibW9kdWxlcyIsIkpTT04iLCJwYXJzZSIsIl9fd2VicGFja19yZXF1aXJlX18iLCJfdHlwZW9mIiwib2JqIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIiQiLCJkb2N1bWVudCIsImdlbmVyYXRlTWFza1NldCIsImFuYWx5c2VNYXNrIiwibWFza1Njb3BlIiwiSW5wdXRtYXNrIiwiYWxpYXMiLCJvcHRpb25zIiwiaW50ZXJuYWwiLCJ0aGlzIiwiZWwiLCJldmVudHMiLCJtYXNrc2V0IiwicmVmcmVzaFZhbHVlIiwiaXNQbGFpbk9iamVjdCIsIm9wdHMiLCJleHRlbmQiLCJkZWZhdWx0cyIsIm5vTWFza3NDYWNoZSIsImRlZmluaXRpb25zIiwidXNlck9wdGlvbnMiLCJyZXNvbHZlQWxpYXMiLCJpc1JUTCIsIm51bWVyaWNJbnB1dCIsImFsaWFzU3RyIiwiYWxpYXNEZWZpbml0aW9uIiwiYWxpYXNlcyIsIm1hc2siLCJkYXRhQXR0cmlidXRlIiwiX21heFRlc3RQb3MiLCJwbGFjZWhvbGRlciIsIm9wdGlvbmFsbWFya2VyIiwicXVhbnRpZmllcm1hcmtlciIsImdyb3VwbWFya2VyIiwiYWx0ZXJuYXRvcm1hcmtlciIsImVzY2FwZUNoYXIiLCJyZWdleCIsIm9uY29tcGxldGUiLCJub29wIiwib25pbmNvbXBsZXRlIiwib25jbGVhcmVkIiwicmVwZWF0IiwiZ3JlZWR5IiwiYXV0b1VubWFzayIsInJlbW92ZU1hc2tPblN1Ym1pdCIsImNsZWFyTWFza09uTG9zdEZvY3VzIiwiaW5zZXJ0TW9kZSIsImluc2VydE1vZGVWaXN1YWwiLCJjbGVhckluY29tcGxldGUiLCJvbktleURvd24iLCJvbkJlZm9yZU1hc2siLCJvbkJlZm9yZVBhc3RlIiwicGFzdGVkVmFsdWUiLCJpc0Z1bmN0aW9uIiwiY2FsbCIsIm9uQmVmb3JlV3JpdGUiLCJvblVuTWFzayIsInNob3dNYXNrT25Gb2N1cyIsInNob3dNYXNrT25Ib3ZlciIsIm9uS2V5VmFsaWRhdGlvbiIsInNraXBPcHRpb25hbFBhcnRDaGFyYWN0ZXIiLCJyaWdodEFsaWduIiwidW5kb09uRXNjYXBlIiwicmFkaXhQb2ludCIsIl9yYWRpeERhbmNlIiwiZ3JvdXBTZXBhcmF0b3IiLCJrZWVwU3RhdGljIiwicG9zaXRpb25DYXJldE9uVGFiIiwidGFiVGhyb3VnaCIsInN1cHBvcnRzSW5wdXRUeXBlIiwiaWdub3JhYmxlcyIsImlzQ29tcGxldGUiLCJwcmVWYWxpZGF0aW9uIiwicG9zdFZhbGlkYXRpb24iLCJzdGF0aWNEZWZpbml0aW9uU3ltYm9sIiwiaml0TWFza2luZyIsIm51bGxhYmxlIiwiaW5wdXRFdmVudE9ubHkiLCJub1ZhbHVlUGF0Y2hpbmciLCJwb3NpdGlvbkNhcmV0T25DbGljayIsImNhc2luZyIsImlucHV0bW9kZSIsImltcG9ydERhdGFBdHRyaWJ1dGVzIiwic2hpZnRQb3NpdGlvbnMiLCI5IiwidmFsaWRhdG9yIiwiZGVmaW5pdGlvblN5bWJvbCIsIioiLCJtYXNrc0NhY2hlIiwiZWxlbXMiLCJ0aGF0IiwiZ2V0RWxlbWVudEJ5SWQiLCJxdWVyeVNlbGVjdG9yQWxsIiwibm9kZU5hbWUiLCJlYWNoIiwibmR4Iiwic2NvcGVkT3B0cyIsIm5wdCIsImltcG9ydE9wdGlvbiIsIm9wdGlvbiIsIm9wdGlvbkRhdGEiLCJnZXRBdHRyaWJ1dGUiLCJpbmRleE9mIiwiZGF0YW9wdGlvbnMiLCJwIiwiYXR0ck9wdGlvbnMiLCJyZXBsYWNlIiwidG9Mb3dlckNhc2UiLCJkaXIiLCJzdHlsZSIsInRleHRBbGlnbiIsInJlbW92ZUF0dHJpYnV0ZSIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJpbXBvcnRBdHRyaWJ1dGVPcHRpb25zIiwiaW5wdXRtYXNrIiwicmVtb3ZlIiwiZGF0YSIsImFjdGlvbiIsIm5vcmVtYXNrIiwidW5tYXNrZWR2YWx1ZSIsInZhbHVlIiwiZ2V0ZW1wdHltYXNrIiwiaGFzTWFza2VkVmFsdWUiLCJnZXRtZXRhZGF0YSIsImlzVmFsaWQiLCJmb3JtYXQiLCJtZXRhZGF0YSIsInNldFZhbHVlIiwidHJpZ2dlciIsImV4dGVuZERlZmF1bHRzIiwiZXh0ZW5kRGVmaW5pdGlvbnMiLCJkZWZpbml0aW9uIiwiZXh0ZW5kQWxpYXNlcyIsInVubWFzayIsImVzY2FwZVJlZ2V4UmVnZXgiLCJSZWdFeHAiLCJqb2luIiwiZXNjYXBlUmVnZXgiLCJzdHIiLCJkZXBlbmRlbmN5TGliIiwianF1ZXJ5IiwiX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18iLCJldmFsIiwibm9jYWNoZSIsImdlbmVyYXRlTWFzayIsIm1hc2tzZXREZWZpbml0aW9uIiwibWFza2RlZktleSIsInJlZ2V4TWFzayIsInJlcGVhdFN0YXJ0Iiwic3BsaXQiLCJyZXZlcnNlIiwibWFza1Rva2VuIiwidmFsaWRQb3NpdGlvbnMiLCJfYnVmZmVyIiwiYnVmZmVyIiwidGVzdHMiLCJleGNsdWRlcyIsIm1hc2tMZW5ndGgiLCJqaXRPZmZzZXQiLCJpc0FycmF5IiwiYWx0TWFzayIsIm1zayIsInBvcCIsIm1hdGNoIiwibSIsIm9wZW5pbmdUb2tlbiIsImN1cnJlbnRPcGVuaW5nVG9rZW4iLCJhbHRlcm5hdG9yIiwibGFzdE1hdGNoIiwidG9rZW5pemVyIiwicmVnZXhUb2tlbml6ZXIiLCJlc2NhcGVkIiwiY3VycmVudFRva2VuIiwiTWFza1Rva2VuIiwib3BlbmVuaW5ncyIsIm1hc2tUb2tlbnMiLCJjbG9zZVJlZ2V4R3JvdXAiLCJpc0dyb3VwIiwiaXNPcHRpb25hbCIsImlzUXVhbnRpZmllciIsImlzQWx0ZXJuYXRvciIsIm1hdGNoZXMiLCJvcGVuR3JvdXAiLCJhbHRlcm5hdG9yR3JvdXAiLCJxdWFudGlmaWVyIiwibWluIiwibWF4IiwiaW5zZXJ0VGVzdERlZmluaXRpb24iLCJtdG9rZW4iLCJlbGVtZW50IiwicG9zaXRpb24iLCJwcmV2TWF0Y2giLCJ0ZXN0Iiwic3BsaWNlIiwiZm4iLCJzdGF0aWMiLCJvcHRpb25hbGl0eSIsIm5ld0Jsb2NrTWFya2VyIiwiZGVmIiwibmF0aXZlRGVmIiwibG1udCIsIm1hc2tkZWYiLCJnZW5lcmF0ZWQiLCJkZWZhdWx0Q2FzZSIsIm1uZHgiLCJwdXNoIiwiZ3JvdXBpZnkiLCJncm91cFRva2VuIiwiY2xvc2VHcm91cCIsImdyb3VwUXVhbnRpZmllciIsImV4ZWMiLCJjaGFyQXQiLCJhbHRSZWdleEdyb3VwIiwibXFqIiwibXEiLCJtcTAiLCJpc05hTiIsInBhcnNlSW50IiwibXExIiwiaml0IiwidG1wTWF0Y2giLCJzdWJUb2tlbiIsInZlcmlmeUdyb3VwTWFya2VyIiwidG9rZW4iLCJuZXh0VG9rZW4iLCJyZXZlcnNlVG9rZW5zIiwiaGFzT3duUHJvcGVydHkiLCJpbnRNYXRjaCIsInF0Iiwic3QiLCJBIiwiJiIsIiMiLCJpcFZhbGlkYXRvclJlZ2V4IiwiaXBWYWxpZGF0b3IiLCJjaHJzIiwicG9zIiwic3RyaWN0IiwiY3NzdW5pdCIsInVybCIsImlwIiwiaiIsImsiLCJsIiwibWFza2VkVmFsdWUiLCJ1bm1hc2tlZFZhbHVlIiwiZW1haWwiLCItIiwibWFjIiwidmluIiwiViIsInNzbiIsImMiLCJjdXJyZW50UmVzdWx0IiwidWEiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJpZSIsIm1vYmlsZSIsImllbW9iaWxlIiwiaXBob25lIiwia2V5Q29kZSIsImFjdGlvbk9iaiIsInVuZG9WYWx1ZSIsIiRlbCIsIm1heExlbmd0aCIsInNraXBLZXlQcmVzc0V2ZW50Iiwic2tpcElucHV0RXZlbnQiLCJ2YWxpZGF0aW9uRXZlbnQiLCJpZ25vcmFibGUiLCJtb3VzZUVudGVyIiwib3JpZ2luYWxQbGFjZWhvbGRlciIsImdldE1hc2tUZW1wbGF0ZSIsImJhc2VPbklucHV0IiwibWluaW1hbFBvcyIsImluY2x1ZGVNb2RlIiwibm9KaXQiLCJjbGVhck9wdGlvbmFsVGFpbCIsIm5keEludGx6ciIsInRlc3RQb3MiLCJqaXRSZW5kZXJTdGF0aWMiLCJtYXNrVGVtcGxhdGUiLCJnZW5lcmF0ZWRJbnB1dCIsImlucHV0IiwiZGV0ZXJtaW5lVGVzdFRlbXBsYXRlIiwiZ2V0VGVzdHMiLCJsb2NhdG9yIiwic2xpY2UiLCJnZXRQbGFjZWhvbGRlciIsImdldFRlc3RUZW1wbGF0ZSIsImlzRmluaXRlIiwicmVzZXRNYXNrU2V0Iiwic29mdCIsImdldExhc3RWYWxpZFBvc2l0aW9uIiwiY2xvc2VzdFRvIiwiYmVmb3JlIiwiYWZ0ZXIiLCJ2YWxpZHMiLCJwb3NOZHgiLCJwc05keCIsImdldERlY2lzaW9uVGFrZXIiLCJ0c3QiLCJkZWNpc2lvblRha2VyIiwiYWx0ZXJuYXRpb24iLCJ0b1N0cmluZyIsImdldExvY2F0b3IiLCJhbGlnbiIsIm1sb2MiLCJ0c3RMb2NhdG9yIiwiY2xvc2VzdCIsImJlc3RNYXRjaCIsInRhcmdldExvY2F0b3IiLCJnZXRUZXN0IiwiZGlzdGFuY2UiLCJNYXRoIiwiYWJzIiwib3B0aW9uYWxRdWFudGlmaWVyIiwidHN0UHMiLCJwb3NpdGlvbkNhbk1hdGNoRGVmaW5pdGlvbiIsInRlc3REZWZpbml0aW9uIiwidmFsaWQiLCJ0bmR4IiwibGF0ZXN0TWF0Y2giLCJuZHhJbml0aWFsaXplciIsImluc2VydFN0b3AiLCJjYWNoZURlcGVuZGVuY3kiLCJyZXNvbHZlVGVzdEZyb21Ub2tlbiIsImxvb3BOZHgiLCJxdWFudGlmaWVyUmVjdXJzZSIsImhhbmRsZU1hdGNoIiwiaXNGaXJzdE1hdGNoIiwidG9rZW5Hcm91cCIsImZpcnN0TWF0Y2giLCJpbkFycmF5IiwicmVzb2x2ZU5keEluaXRpYWxpemVyIiwiYWx0ZXJuYXRlTmR4IiwidGFyZ2V0QWx0ZXJuYXRpb24iLCJpbmRleFBvcyIsIm5keFBvcyIsImJlc3RNYXRjaEFsdEluZGV4IiwiaXNTdWJzZXRPZiIsInNvdXJjZSIsInRhcmdldCIsImV4cGFuZCIsInBhdHRlcm4iLCJlbmQiLCJleHBhbmRlZCIsInN0YXJ0IiwiY2hhckNvZGVBdCIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsInNldE1lcmdlTG9jYXRvcnMiLCJ0YXJnZXRNYXRjaCIsImFsdE1hdGNoIiwiYWx0ZXJuYXRpb25OZHgiLCJzaG91bGRNZXJnZSIsImxvY05keCIsImlzU2FtZUxldmVsIiwiY2QiLCJvcHRpb25hbFRva2VuIiwibXRjaHNOZHgiLCJtdGNoIiwibWFsdE1hdGNoZXMiLCJhbHRlcm5hdGVUb2tlbiIsIm1hbHRlcm5hdGVNYXRjaGVzIiwiY3VycmVudE1hdGNoZXMiLCJsb29wTmR4Q250IiwiYWx0SW5kZXgiLCJzaGlmdCIsImFtbmR4IiwiY3VycmVudFBvcyIsIm5keEluaXRpYWxpemVyQ2xvbmUiLCJhbHRJbmRleEFyciIsImFsdEluZGV4QXJyQ2xvbmUiLCJleGwiLCJleGNsdWRlU2V0IiwidW5NYXRjaGVkQWx0ZXJuYXRpb24iLCJjb25jYXQiLCJuZHgxIiwiZHJvcE1hdGNoIiwibmR4MiIsImFsdE1hdGNoMiIsInFuZHgiLCJwcmV2aW91c1BvcyIsIm1lcmdlTG9jYXRvcnMiLCJtdG5keCIsImdldEJ1ZmZlclRlbXBsYXRlIiwiZ2V0QnVmZmVyIiwibm9DYWNoZSIsInJlZnJlc2hGcm9tQnVmZmVyIiwiYmZmciIsImRldGVybWluZU5ld0NhcmV0UG9zaXRpb24iLCJiZWdpbiIsImtleXByZXNzIiwiRXZlbnQiLCJ3aGljaCIsInZhbFJlc3VsdCIsIkV2ZW50SGFuZGxlcnMiLCJrZXlwcmVzc0V2ZW50IiwiZm9yd2FyZFBvc2l0aW9uIiwiZWxlbSIsInRvVXBwZXJDYXNlIiwicG9zQmVmb3JlIiwiU1BBQ0UiLCJhcmdzIiwiQXJyYXkiLCJhcmd1bWVudHMiLCJhcHBseSIsImNoZWNrQWx0ZXJuYXRpb25NYXRjaCIsImFsdEFycjEiLCJhbHRBcnIyIiwibmEiLCJuYU5keCIsImFsdEFyckMiLCJpc01hdGNoIiwibmFBcnIiLCJhbG5keCIsImFsdGVybmF0ZSIsIm1hc2tQb3MiLCJmcm9tSXNWYWxpZCIsInJBbHRQb3MiLCJzZWxlY3Rpb24iLCJsYXN0QWx0IiwiYWx0UG9zIiwicHJldkFsdFBvcyIsInZhbGlkUG9zIiwiZGVjaXNpb25Qb3MiLCJ2YWxpZFBzQ2xvbmUiLCJ0c3RDbG9uZSIsImlzVmFsaWRSc2x0IiwicmV0dXJuUnNsdCIsImxBbHRQb3MiLCJ2YWxpZElucHV0cyIsInJlc3VsdFBvcyIsImNhcmV0IiwiY2FyZXRQb3MiLCJmcm9tQWx0ZXJuYXRlIiwidmFsaWRhdGVPbmx5IiwiaXNTZWxlY3Rpb24iLCJwb3NPYmoiLCJwcm9jZXNzQ29tbWFuZE9iamVjdCIsImNvbW1hbmRPYmoiLCJzb3J0IiwiYiIsInJldmFsaWRhdGVNYXNrIiwiaW5zZXJ0IiwicmVmcmVzaCIsInJld3JpdGVQb3NpdGlvbiIsIl9pc1ZhbGlkIiwicnNsdCIsInZhbGlkYXRlZFBvcyIsInJlc3VsdCIsInBvc2l0aW9uc0Nsb25lIiwiY3VycmVudFBvc1ZhbGlkIiwic2Vla05leHQiLCJza2lwIiwiaXNNYXNrIiwiblBvcyIsInNuUG9zIiwidHJhY2tiYWNrUG9zaXRpb25zIiwicG9zdFJlc3VsdCIsIm9yaWdpbmFsUG9zIiwibmV3UG9zIiwiZmlsbE9ubHkiLCJwcyIsIm5wIiwiY3ZwSW5wdXQiLCJ2YWxpZFRlc3QiLCJJc0VuY2xvc2VkU3RhdGljIiwicG9zTWF0Y2giLCJuZXh0TWF0Y2giLCJvZmZzZXQiLCJsdnAiLCJ0IiwiY2FuTWF0Y2giLCJmdXp6eSIsInRlc3RUZW1wbGF0ZSIsInRlc3RQbGFjZUhvbGRlciIsIm5ld0Jsb2NrIiwic2Vla1ByZXZpb3VzIiwid3JpdGVCdWZmZXIiLCJldmVudCIsInRyaWdnZXJFdmVudHMiLCJfdmFsdWVTZXQiLCJ0eXBlIiwiREVMRVRFIiwiQkFDS1NQQUNFIiwiJGlucHV0IiwibnB0VmFsIiwiX3ZhbHVlR2V0Iiwic2V0VGltZW91dCIsInJldHVyblBMIiwicHJldlRlc3QiLCJzdGF0aWNBbHRlcm5hdGlvbnMiLCJIYW5kbGVOYXRpdmVQbGFjZWhvbGRlciIsIm5wdFZhbHVlIiwic2VsZWN0ZWRDYXJldCIsInRhYmJlZCIsImNsaWNrUG9zIiwiZGlnaXRzIiwidnBzIiwicmFkaXhQb3MiLCJ2cCIsImRvUmFkaXhGb2N1cyIsImNsaWNrUG9zaXRpb24iLCJsdmNsaWNrUG9zaXRpb24iLCJsYXN0UG9zaXRpb24iLCJ0dCIsInZhbHVlQnVmZmVyIiwiRXZlbnRSdWxlciIsIm9uIiwiZXZlbnROYW1lIiwiZXZlbnRIYW5kbGVyIiwiZXYiLCJlIiwib3JpZ2luYWxFdmVudCIsImltT3B0cyIsIm9mZiIsImRpc2FibGVkIiwicmVhZE9ubHkiLCJjdHJsS2V5IiwiVEFCIiwiaW5wdXRUeXBlIiwicHJldmVudERlZmF1bHQiLCJibHVyIiwiZm9jdXMiLCJyZXR1cm5WYWwiLCJzdG9wUHJvcGFnYXRpb24iLCJmb3JtIiwiZXZBcnIiLCJrZXlkb3duRXZlbnQiLCJrZFJlc3VsdCIsIkJBQ0tTUEFDRV9TQUZBUkkiLCJYIiwiaGFuZGxlUmVtb3ZlIiwiRU5EIiwiUEFHRV9ET1dOIiwic2hpZnRLZXkiLCJIT01FIiwiUEFHRV9VUCIsIkVTQ0FQRSIsImFsdEtleSIsImNoZWNrVmFsIiwiUklHSFQiLCJMRUZUIiwiY2FyZXRQb3NfYmVnaW4iLCJ0cmFuc2xhdGVQb3NpdGlvbiIsImNoZWNrdmFsIiwid3JpdGVPdXQiLCJjaGFyQ29kZSIsIm1ldGFLZXkiLCJFTlRFUiIsImxvY2F0aW9uIiwid3JpdGVPdXRCdWZmZXIiLCJwYXN0ZUV2ZW50IiwidGVtcFZhbHVlIiwiaW5wdXRWYWx1ZSIsInZhbHVlQmVmb3JlQ2FyZXQiLCJzdWJzdHIiLCJ2YWx1ZUFmdGVyQ2FyZXQiLCJjbGlwYm9hcmREYXRhIiwiZ2V0RGF0YSIsInBhc3RlVmFsdWUiLCJpbnB1dEZhbGxCYWNrRXZlbnQiLCJjaGFuZ2VzIiwiYmwiLCJmcm9udFBhcnQiLCJiYWNrUGFydCIsImZyb250QnVmZmVyUGFydCIsImJhY2tCdWZmZXJQYXJ0IiwiZnBsIiwiYnBsIiwidW5zaGlmdCIsIm5ld0J1ZmZlciIsIm9sZEJ1ZmZlciIsImFuYWx5c2VDaGFuZ2VzIiwiaW5wdXRDaGFyIiwiaXYiLCJpZU1vYmlsZUhhbmRsZXIiLCJzaGFkb3dSb290IiwiYWN0aXZlRWxlbWVudCIsImVudHJ5Iiwia2V5ZG93biIsImFwcGx5SW5wdXRWYWx1ZSIsImNvbXBvc2l0aW9uZW5kRXZlbnQiLCJzZXRWYWx1ZUV2ZW50IiwiYXJndW1lbnRfMSIsImFyZ3VtZW50XzIiLCJkZXRhaWwiLCJmb2N1c0V2ZW50IiwiY2xpY2tFdmVudCIsImludmFsaWRFdmVudCIsIm1vdXNlbGVhdmVFdmVudCIsIm5ld0NhcmV0UG9zaXRpb24iLCJjdXRFdmVudCIsImNsaXBEYXRhIiwic2V0RGF0YSIsImV4ZWNDb21tYW5kIiwiYmx1ckV2ZW50IiwibW91c2VlbnRlckV2ZW50Iiwic3VibWl0RXZlbnQiLCJyZXNldEV2ZW50IiwibnB0dmwiLCJpbml0aWF0aW5nRXZlbnQiLCJjaGFyQ29kZXMiLCJpbml0aWFsTmR4Iiwic3RhdGljTWF0Y2hlcyIsInByZXZDYXJldFBvcyIsInRhcmdldFRlbXBsYXRlIiwiY2hhckNvZGVOZHgiLCJuZXh0UG9zIiwiaXNUZW1wbGF0ZU1hdGNoIiwic25keCIsIm5leHRWYWxpZCIsIm5leHRTbmR4Iiwidm5keCIsInVtVmFsdWUiLCJwbmR4IiwiYnVmZmVyVmFsdWUiLCJub3RyYW5zbGF0ZSIsImlzRGVsZXRlIiwicmFuZ2UiLCJzZWxlY3Rpb25TdGFydCIsInNlbGVjdGlvbkVuZCIsImdldFNlbGVjdGlvbiIsImdldFJhbmdlQXQiLCJjb21tb25BbmNlc3RvckNvbnRhaW5lciIsInBhcmVudE5vZGUiLCJzdGFydE9mZnNldCIsImVuZE9mZnNldCIsImNyZWF0ZVJhbmdlIiwiZHVwbGljYXRlIiwibW92ZVN0YXJ0IiwidGV4dCIsInNjcm9sbENhbGMiLCJvd25lckRvY3VtZW50IiwiZGVmYXVsdFZpZXciLCJnZXRDb21wdXRlZFN0eWxlIiwiY3VycmVudFN0eWxlIiwiZm9udFNpemUiLCJzY3JvbGxMZWZ0Iiwic2Nyb2xsV2lkdGgiLCJzZXRTZWxlY3Rpb25SYW5nZSIsImZpcnN0Q2hpbGQiLCJ0ZXh0Tm9kZSIsImNyZWF0ZVRleHROb2RlIiwiYXBwZW5kQ2hpbGQiLCJzZXRTdGFydCIsInNldEVuZCIsImNvbGxhcHNlIiwic2VsIiwicmVtb3ZlQWxsUmFuZ2VzIiwiYWRkUmFuZ2UiLCJjcmVhdGVUZXh0UmFuZ2UiLCJtb3ZlRW5kIiwic2VsZWN0IiwiZGV0ZXJtaW5lTGFzdFJlcXVpcmVkUG9zaXRpb24iLCJyZXR1cm5EZWZpbml0aW9uIiwicG9zaXRpb25zIiwibHZUZXN0IiwibHZUZXN0QWx0IiwidGVtcGxhdGUiLCJjb21wbGV0ZSIsImxycCIsImFtbCIsInBlbmQiLCJpc1N1cHBvcnRlZCIsInRhZ05hbWUiLCJlbGVtZW50VHlwZSIsImlzQ29udGVudEVkaXRhYmxlIiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsInZhbHVlR2V0IiwidmFsdWVTZXQiLCJnZXR0ZXIiLCJzZXR0ZXIiLCJfX3ZhbHVlR2V0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZ2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJvYmplY3QiLCJ2YWx1ZVByb3BlcnR5IiwiZ2V0Iiwic2V0IiwiZGVmaW5lUHJvcGVydHkiLCJjb25maWd1cmFibGUiLCJ0ZXh0Q29udGVudCIsIl9fbG9va3VwR2V0dGVyX18iLCJfX2xvb2t1cFNldHRlcl9fIiwiX19kZWZpbmVHZXR0ZXJfXyIsIl9fZGVmaW5lU2V0dGVyX18iLCJfX3ZhbHVlU2V0Iiwib3ZlcnJ1bGVSVEwiLCJ2YWxIb29rcyIsImlucHV0bWFza3BhdGNoIiwidmFsaG9va0dldCIsInZhbGhvb2tTZXQiLCJwYXRjaFZhbGhvb2siLCJpbnN0YWxsTmF0aXZlVmFsdWVTZXRGYWxsYmFjayIsInBhdGNoVmFsdWVQcm9wZXJ0eSIsImlzRWxlbWVudFR5cGVTdXBwb3J0ZWQiLCJpbnB1dE1vZGUiLCJhdXRvY29tcGxldGUiLCJybCIsImxtaWIiLCJjdiIsIm1hc2tUYXJnZXQiLCJtdGR0IiwiZm9ybWF0Q29kZSIsImQiLCJEYXRlIiwic2V0RGF0ZSIsImdldERhdGUiLCJkZCIsInBhZCIsImRkZCIsImRkZGQiLCJzZXRNb250aCIsImdldE1vbnRoIiwibW0iLCJtbW0iLCJtbW1tIiwieXkiLCJzZXRGdWxsWWVhciIsImdldEZ1bGxZZWFyIiwieXl5eSIsImgiLCJzZXRIb3VycyIsImdldEhvdXJzIiwiaGgiLCJoeCIsIngiLCJIIiwiSEgiLCJIeCIsIk0iLCJzZXRNaW51dGVzIiwiZ2V0TWludXRlcyIsIk1NIiwicyIsInNldFNlY29uZHMiLCJnZXRTZWNvbmRzIiwic3MiLCJzZXRNaWxsaXNlY29uZHMiLCJnZXRNaWxsaXNlY29uZHMiLCJMIiwiVCIsIlRUIiwiWiIsIm8iLCJTIiwiZm9ybWF0QWxpYXMiLCJpc29EYXRlIiwiaXNvVGltZSIsImlzb0RhdGVUaW1lIiwiaXNvVXRjRGF0ZVRpbWUiLCJmb3JtYXRjb2RlIiwiZHluTWF0Y2hlcyIsImZjb2RlIiwiZ2V0VG9rZW5pemVyIiwidG9rZW5zIiwiZHludG9rZW5zIiwiZHluVG9rZW4iLCJkYXRlT2JqVmFsdWUiLCJyYXciLCJsYXN0SW5kZXgiLCJkYXRlIiwidmFsIiwibGVuIiwibWFza1N0cmluZyIsInRhcmdldFByb3AiLCJkYXRlT3BlcmF0aW9uIiwiZGF0ZU9iaiIsImV4dGVuZFByb3BlcnR5IiwiaW1wb3J0RGF0ZSIsImlucHV0Rm9ybWF0IiwiZ2V0WWVhciIsImdldFRva2VuTWF0Y2giLCJjYWxjUG9zIiwibWF0Y2hMZW5ndGgiLCJ0YXJnZXRNYXRjaEluZGV4IiwiZGF0ZXRpbWUiLCJpMThuIiwib3JkaW5hbFN1ZmZpeCIsImRpc3BsYXlGb3JtYXQiLCJvdXRwdXRGb3JtYXQiLCJkYXlOYW1lcyIsIm1vbnRoTmFtZXMiLCJ0b2tlbk1hdGNoIiwicGFydCIsImRhdGVQYXJ0cyIsImdldFRpbWUiLCJyYXdkYXkiLCJkYXkiLCJyYXd5ZWFyIiwicmF3bW9udGgiLCJtb250aCIsImlzVmFsaWREYXRlIiwicmF3WWVhciIsInllYXIiLCJpc0RhdGVJblJhbmdlIiwiaW5pdGlhbFZhbHVlIiwiYXV0b0VzY2FwZSIsInR4dCIsImVzY2FwZWRUeHQiLCJhbGlnbkRpZ2l0cyIsImZvcmNlIiwiZGlnaXRzT3B0aW9uYWwiLCJyYWRpeFBvc2l0aW9uIiwiZmluZFZhbGlkYXRvciIsInN5bWJvbCIsInRzdE5keCIsIm5keGwiLCJmaW5kVmFsaWQiLCJyZXQiLCJkZWNpbWFsVmFsaWRhdG9yIiwibnVtZXJpYyIsImRlY2ltYWxEZWYiLCJyYWRpeFBvaW50RGVmIiwiX19maW5hbmNlSW5wdXQiLCJwcmVmaXgiLCJfbWFzayIsImRxIiwic3VmZml4IiwicGFyc2VNaW5NYXhPcHRpb25zIiwicGFyc2VGbG9hdCIsIk5hTiIsIk51bWJlciIsIk1JTl9WQUxVRSIsIk1BWF9WQUxVRSIsImVuZm9yY2VEaWdpdHNPbkJsdXIiLCJhbGxvd01pbnVzIiwibmVnYXRpb25TeW1ib2wiLCJmcm9udCIsImJhY2siLCJzdGVwIiwidW5tYXNrQXNOdW1iZXIiLCJyb3VuZGluZ0ZOIiwicm91bmQiLCJzaG9ydGN1dHMiLCIwIiwiMSIsIisiLCJpbnNlcnRzIiwiaW5pdFBvcyIsImhhbm5kbGVSYWRpeERhbmNlIiwiaXNOZWdhdGl2ZSIsInVubWFza2VkIiwicHJvY2Vzc1ZhbHVlIiwidmFsdWVQYXJ0cyIsImludGVnZXJQYXJ0IiwiZGVjaW1hbFBhcnQiLCJmb3JjZURpZ2l0cyIsImRpZ2l0c0ZhY3RvciIsInBvdyIsInRvRml4ZWQiLCJzdWJzdHJpbmciLCJudW1iZXJWYWx1ZSIsInN0cmlwQnVmZmVyIiwic3RyaXBSYWRpeCIsImxlYWRpbmd6ZXJvZXMiLCJudW1iZXJNYXRjaGVzIiwibnVtYmVyIiwiY2hlY2tGb3JMZWFkaW5nWmVyb2VzIiwiYnVmIiwiY2FyZXROZHgiLCJuZXdDYXJldFBvcyIsIm5tYnJNdGNocyIsIlVQIiwiRE9XTiIsImN1cnJlbmN5IiwiZGVjaW1hbCIsImludGVnZXIiLCJwZXJjZW50YWdlIiwiaW5kaWFubnMiLCJfaW5wdXRtYXNrIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsInNlbGYiLCJSZWZlcmVuY2VFcnJvciIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJfd3JhcE5hdGl2ZVN1cGVyIiwiQ2xhc3MiLCJfY2FjaGUiLCJNYXAiLCJGdW5jdGlvbiIsIlR5cGVFcnJvciIsImhhcyIsIldyYXBwZXIiLCJfY29uc3RydWN0IiwiX2dldFByb3RvdHlwZU9mIiwiY3JlYXRlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiX3NldFByb3RvdHlwZU9mIiwiUGFyZW50IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsInNoYW0iLCJQcm94eSIsImlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsImluc3RhbmNlIiwiYmluZCIsInNldFByb3RvdHlwZU9mIiwiaGVhZCIsImNyZWF0ZVNoYWRvd1Jvb3QiLCJhdHRhY2hTaGFkb3ciLCJJbnB1dG1hc2tFbGVtZW50IiwiX0hUTUxFbGVtZW50IiwiX3RoaXMiLCJDb25zdHJ1Y3RvciIsIl9jbGFzc0NhbGxDaGVjayIsImF0dHJpYnV0ZU5hbWVzIiwiZ2V0QXR0cmlidXRlTmFtZXMiLCJzaGFkb3ciLCJtb2RlIiwiYXR0ciIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsIl9pbmhlcml0cyIsIkhUTUxFbGVtZW50IiwiY3VzdG9tRWxlbWVudHMiLCJucHRtYXNrIiwiaW0iLCJpbnN0YWxsZWRNb2R1bGVzIiwibmFtZSIsInIiLCJ0b1N0cmluZ1RhZyIsIm5zIiwia2V5IiwibiIsInByb3BlcnR5IiwibW9kdWxlSWQiXSwibWFwcGluZ3MiOiJDQU9DLFNBQTBDQSxFQUFNQyxHQUM3QyxHQUFJLGlCQUFtQkMsU0FBVyxpQkFBbUJDLE9BQVFBLE9BQU9ELFFBQVVELEVBQVFHLFFBQVEsZ0JBQWlCLEdBQUksbUJBQXFCQyxRQUFVQSxPQUFPQyxJQUFLRCxPQUFPLENBQUUsVUFBWUosT0FBZSxDQUM5TCxJQUFJTSxF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QUFNMkIsSUFDYixPQUFPRCxHQUNSMTZCLG9CQUFvQjQ2QixFQUFJLFNBQVN4N0IsR0FDaEMsSUFBSXVyQixFQUFTdnJCLEdBQVVBLEVBQU9pNEIsV0FBYSxXQUN2QyxPQUFPajRCLEVBQU9rNEIsU0FDZCxXQUNBLE9BQU9sNEIsR0FFWCxPQUFPWSxvQkFBb0I4c0IsRUFBRW5DLEVBQVEsSUFBS0EsR0FBU0EsR0FDcEQzcUIsb0JBQW9Cc3ZCLEVBQUksU0FBU3JFLEVBQVE0UCxHQUN4QyxPQUFPdHpCLE9BQU9qSCxVQUFVcU8sZUFBZTlLLEtBQUtvbkIsRUFBUTRQLElBQ3JENzZCLG9CQUFvQitHLEVBQUksR0FBSS9HLG9CQUFvQkEsb0JBQW9CNHVCLEVBQUksSUFDM0UsU0FBUzV1QixvQkFBb0I4NkIsR0FDekIsR0FBSVIsaUJBQWlCUSxHQUFXLE9BQU9SLGlCQUFpQlEsR0FBVTM3QixRQUNsRSxJQUFJQyxFQUFTazdCLGlCQUFpQlEsR0FBWSxDQUN0Q3A3QixFQUFHbzdCLEVBQ0hsckIsR0FBRyxFQUNIelEsUUFBUyxJQUViLE9BQU9VLFFBQVFpN0IsR0FBVWozQixLQUFLekUsRUFBT0QsUUFBU0MsRUFBUUEsRUFBT0QsUUFBU2EscUJBQ3RFWixFQUFPd1EsR0FBSSxFQUFJeFEsRUFBT0QsUUFFMUIsSUFBSVUsUUFBU3k2QiIsImZpbGUiOiJqcXVlcnkuaW5wdXRtYXNrLm1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogZGlzdC9qcXVlcnkuaW5wdXRtYXNrXG4gKiBodHRwczovL2dpdGh1Yi5jb20vUm9iaW5IZXJib3RzL0lucHV0bWFza1xuICogQ29weXJpZ2h0IChjKSAyMDEwIC0gMjAyMCBSb2JpbiBIZXJib3RzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIFZlcnNpb246IDUuMC4zXG4gKi9cbiFmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgaWYgKFwib2JqZWN0XCIgPT0gdHlwZW9mIGV4cG9ydHMgJiYgXCJvYmplY3RcIiA9PSB0eXBlb2YgbW9kdWxlKSBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcImpxdWVyeVwiKSk7IGVsc2UgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZGVmaW5lICYmIGRlZmluZS5hbWQpIGRlZmluZShbIFwianF1ZXJ5XCIgXSwgZmFjdG9yeSk7IGVsc2Uge1xuICAgICAgICB2YXIgYSA9IFwib2JqZWN0XCIgPT0gdHlwZW9mIGV4cG9ydHMgPyBmYWN0b3J5KHJlcXVpcmUoXCJqcXVlcnlcIikpIDogZmFjdG9yeShyb290LmpRdWVyeSk7XG4gICAgICAgIGZvciAodmFyIGkgaW4gYSkgKFwib2JqZWN0XCIgPT0gdHlwZW9mIGV4cG9ydHMgPyBleHBvcnRzIDogcm9vdClbaV0gPSBhW2ldO1xuICAgIH1cbn0od2luZG93LCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18zX18pIHtcbiAgICByZXR1cm4gbW9kdWxlcyA9IFsgZnVuY3Rpb24obW9kdWxlKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gSlNPTi5wYXJzZSgne1wiQkFDS1NQQUNFXCI6OCxcIkJBQ0tTUEFDRV9TQUZBUklcIjoxMjcsXCJERUxFVEVcIjo0NixcIkRPV05cIjo0MCxcIkVORFwiOjM1LFwiRU5URVJcIjoxMyxcIkVTQ0FQRVwiOjI3LFwiSE9NRVwiOjM2LFwiSU5TRVJUXCI6NDUsXCJMRUZUXCI6MzcsXCJQQUdFX0RPV05cIjozNCxcIlBBR0VfVVBcIjozMyxcIlJJR0hUXCI6MzksXCJTUEFDRVwiOjMyLFwiVEFCXCI6OSxcIlVQXCI6MzgsXCJYXCI6ODgsXCJDT05UUk9MXCI6MTd9Jyk7XG4gICAgfSwgZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgICAgICAgICAgfSA6IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICAgICAgICAgIH0sIF90eXBlb2Yob2JqKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMiksIHdpbmRvdyA9IF9fd2VicGFja19yZXF1aXJlX18oNCksIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50LCBnZW5lcmF0ZU1hc2tTZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpLmdlbmVyYXRlTWFza1NldCwgYW5hbHlzZU1hc2sgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpLmFuYWx5c2VNYXNrLCBtYXNrU2NvcGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xuICAgICAgICBmdW5jdGlvbiBJbnB1dG1hc2soYWxpYXMsIG9wdGlvbnMsIGludGVybmFsKSB7XG4gICAgICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSW5wdXRtYXNrKSkgcmV0dXJuIG5ldyBJbnB1dG1hc2soYWxpYXMsIG9wdGlvbnMsIGludGVybmFsKTtcbiAgICAgICAgICAgIHRoaXMuZWwgPSB2b2lkIDAsIHRoaXMuZXZlbnRzID0ge30sIHRoaXMubWFza3NldCA9IHZvaWQgMCwgdGhpcy5yZWZyZXNoVmFsdWUgPSAhMSwgXG4gICAgICAgICAgICAhMCAhPT0gaW50ZXJuYWwgJiYgKCQuaXNQbGFpbk9iamVjdChhbGlhcykgPyBvcHRpb25zID0gYWxpYXMgOiAob3B0aW9ucyA9IG9wdGlvbnMgfHwge30sIFxuICAgICAgICAgICAgYWxpYXMgJiYgKG9wdGlvbnMuYWxpYXMgPSBhbGlhcykpLCB0aGlzLm9wdHMgPSAkLmV4dGVuZCghMCwge30sIHRoaXMuZGVmYXVsdHMsIG9wdGlvbnMpLCBcbiAgICAgICAgICAgIHRoaXMubm9NYXNrc0NhY2hlID0gb3B0aW9ucyAmJiB2b2lkIDAgIT09IG9wdGlvbnMuZGVmaW5pdGlvbnMsIHRoaXMudXNlck9wdGlvbnMgPSBvcHRpb25zIHx8IHt9LCBcbiAgICAgICAgICAgIHJlc29sdmVBbGlhcyh0aGlzLm9wdHMuYWxpYXMsIG9wdGlvbnMsIHRoaXMub3B0cyksIHRoaXMuaXNSVEwgPSB0aGlzLm9wdHMubnVtZXJpY0lucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiByZXNvbHZlQWxpYXMoYWxpYXNTdHIsIG9wdGlvbnMsIG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBhbGlhc0RlZmluaXRpb24gPSBJbnB1dG1hc2sucHJvdG90eXBlLmFsaWFzZXNbYWxpYXNTdHJdO1xuICAgICAgICAgICAgcmV0dXJuIGFsaWFzRGVmaW5pdGlvbiA/IChhbGlhc0RlZmluaXRpb24uYWxpYXMgJiYgcmVzb2x2ZUFsaWFzKGFsaWFzRGVmaW5pdGlvbi5hbGlhcywgdm9pZCAwLCBvcHRzKSwgXG4gICAgICAgICAgICAkLmV4dGVuZCghMCwgb3B0cywgYWxpYXNEZWZpbml0aW9uKSwgJC5leHRlbmQoITAsIG9wdHMsIG9wdGlvbnMpLCAhMCkgOiAobnVsbCA9PT0gb3B0cy5tYXNrICYmIChvcHRzLm1hc2sgPSBhbGlhc1N0ciksIFxuICAgICAgICAgICAgITEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGltcG9ydEF0dHJpYnV0ZU9wdGlvbnMobnB0LCBvcHRzLCB1c2VyT3B0aW9ucywgZGF0YUF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgZnVuY3Rpb24gaW1wb3J0T3B0aW9uKG9wdGlvbiwgb3B0aW9uRGF0YSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbkRhdGEgPSB2b2lkIDAgIT09IG9wdGlvbkRhdGEgPyBvcHRpb25EYXRhIDogbnB0LmdldEF0dHJpYnV0ZShkYXRhQXR0cmlidXRlICsgXCItXCIgKyBvcHRpb24pLCBcbiAgICAgICAgICAgICAgICBudWxsICE9PSBvcHRpb25EYXRhICYmIChcInN0cmluZ1wiID09IHR5cGVvZiBvcHRpb25EYXRhICYmICgwID09PSBvcHRpb24uaW5kZXhPZihcIm9uXCIpID8gb3B0aW9uRGF0YSA9IHdpbmRvd1tvcHRpb25EYXRhXSA6IFwiZmFsc2VcIiA9PT0gb3B0aW9uRGF0YSA/IG9wdGlvbkRhdGEgPSAhMSA6IFwidHJ1ZVwiID09PSBvcHRpb25EYXRhICYmIChvcHRpb25EYXRhID0gITApKSwgXG4gICAgICAgICAgICAgICAgdXNlck9wdGlvbnNbb3B0aW9uXSA9IG9wdGlvbkRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEwID09PSBvcHRzLmltcG9ydERhdGFBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGF0dHJPcHRpb25zID0gbnB0LmdldEF0dHJpYnV0ZShkYXRhQXR0cmlidXRlKSwgb3B0aW9uLCBkYXRhb3B0aW9ucywgb3B0aW9uRGF0YSwgcDtcbiAgICAgICAgICAgICAgICBpZiAoYXR0ck9wdGlvbnMgJiYgXCJcIiAhPT0gYXR0ck9wdGlvbnMgJiYgKGF0dHJPcHRpb25zID0gYXR0ck9wdGlvbnMucmVwbGFjZSgvJy9nLCAnXCInKSwgXG4gICAgICAgICAgICAgICAgZGF0YW9wdGlvbnMgPSBKU09OLnBhcnNlKFwie1wiICsgYXR0ck9wdGlvbnMgKyBcIn1cIikpLCBkYXRhb3B0aW9ucykgZm9yIChwIGluIG9wdGlvbkRhdGEgPSB2b2lkIDAsIFxuICAgICAgICAgICAgICAgIGRhdGFvcHRpb25zKSBpZiAoXCJhbGlhc1wiID09PSBwLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uRGF0YSA9IGRhdGFvcHRpb25zW3BdO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChvcHRpb24gaW4gaW1wb3J0T3B0aW9uKFwiYWxpYXNcIiwgb3B0aW9uRGF0YSksIHVzZXJPcHRpb25zLmFsaWFzICYmIHJlc29sdmVBbGlhcyh1c2VyT3B0aW9ucy5hbGlhcywgdXNlck9wdGlvbnMsIG9wdHMpLCBcbiAgICAgICAgICAgICAgICBvcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhb3B0aW9ucykgZm9yIChwIGluIG9wdGlvbkRhdGEgPSB2b2lkIDAsIGRhdGFvcHRpb25zKSBpZiAocC50b0xvd2VyQ2FzZSgpID09PSBvcHRpb24udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uRGF0YSA9IGRhdGFvcHRpb25zW3BdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaW1wb3J0T3B0aW9uKG9wdGlvbiwgb3B0aW9uRGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICQuZXh0ZW5kKCEwLCBvcHRzLCB1c2VyT3B0aW9ucyksIFwicnRsXCIgIT09IG5wdC5kaXIgJiYgIW9wdHMucmlnaHRBbGlnbiB8fCAobnB0LnN0eWxlLnRleHRBbGlnbiA9IFwicmlnaHRcIiksIFxuICAgICAgICAgICAgXCJydGxcIiAhPT0gbnB0LmRpciAmJiAhb3B0cy5udW1lcmljSW5wdXQgfHwgKG5wdC5kaXIgPSBcImx0clwiLCBucHQucmVtb3ZlQXR0cmlidXRlKFwiZGlyXCIpLCBcbiAgICAgICAgICAgIG9wdHMuaXNSVEwgPSAhMCksIE9iamVjdC5rZXlzKHVzZXJPcHRpb25zKS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgSW5wdXRtYXNrLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgIGRhdGFBdHRyaWJ1dGU6IFwiZGF0YS1pbnB1dG1hc2tcIixcbiAgICAgICAgICAgIGRlZmF1bHRzOiB7XG4gICAgICAgICAgICAgICAgX21heFRlc3RQb3M6IDUwMCxcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJfXCIsXG4gICAgICAgICAgICAgICAgb3B0aW9uYWxtYXJrZXI6IFsgXCJbXCIsIFwiXVwiIF0sXG4gICAgICAgICAgICAgICAgcXVhbnRpZmllcm1hcmtlcjogWyBcIntcIiwgXCJ9XCIgXSxcbiAgICAgICAgICAgICAgICBncm91cG1hcmtlcjogWyBcIihcIiwgXCIpXCIgXSxcbiAgICAgICAgICAgICAgICBhbHRlcm5hdG9ybWFya2VyOiBcInxcIixcbiAgICAgICAgICAgICAgICBlc2NhcGVDaGFyOiBcIlxcXFxcIixcbiAgICAgICAgICAgICAgICBtYXNrOiBudWxsLFxuICAgICAgICAgICAgICAgIHJlZ2V4OiBudWxsLFxuICAgICAgICAgICAgICAgIG9uY29tcGxldGU6ICQubm9vcCxcbiAgICAgICAgICAgICAgICBvbmluY29tcGxldGU6ICQubm9vcCxcbiAgICAgICAgICAgICAgICBvbmNsZWFyZWQ6ICQubm9vcCxcbiAgICAgICAgICAgICAgICByZXBlYXQ6IDAsXG4gICAgICAgICAgICAgICAgZ3JlZWR5OiAhMSxcbiAgICAgICAgICAgICAgICBhdXRvVW5tYXNrOiAhMSxcbiAgICAgICAgICAgICAgICByZW1vdmVNYXNrT25TdWJtaXQ6ICExLFxuICAgICAgICAgICAgICAgIGNsZWFyTWFza09uTG9zdEZvY3VzOiAhMCxcbiAgICAgICAgICAgICAgICBpbnNlcnRNb2RlOiAhMCxcbiAgICAgICAgICAgICAgICBpbnNlcnRNb2RlVmlzdWFsOiAhMCxcbiAgICAgICAgICAgICAgICBjbGVhckluY29tcGxldGU6ICExLFxuICAgICAgICAgICAgICAgIGFsaWFzOiBudWxsLFxuICAgICAgICAgICAgICAgIG9uS2V5RG93bjogJC5ub29wLFxuICAgICAgICAgICAgICAgIG9uQmVmb3JlTWFzazogbnVsbCxcbiAgICAgICAgICAgICAgICBvbkJlZm9yZVBhc3RlOiBmdW5jdGlvbiBvbkJlZm9yZVBhc3RlKHBhc3RlZFZhbHVlLCBvcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLmlzRnVuY3Rpb24ob3B0cy5vbkJlZm9yZU1hc2spID8gb3B0cy5vbkJlZm9yZU1hc2suY2FsbCh0aGlzLCBwYXN0ZWRWYWx1ZSwgb3B0cykgOiBwYXN0ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uQmVmb3JlV3JpdGU6IG51bGwsXG4gICAgICAgICAgICAgICAgb25Vbk1hc2s6IG51bGwsXG4gICAgICAgICAgICAgICAgc2hvd01hc2tPbkZvY3VzOiAhMCxcbiAgICAgICAgICAgICAgICBzaG93TWFza09uSG92ZXI6ICEwLFxuICAgICAgICAgICAgICAgIG9uS2V5VmFsaWRhdGlvbjogJC5ub29wLFxuICAgICAgICAgICAgICAgIHNraXBPcHRpb25hbFBhcnRDaGFyYWN0ZXI6IFwiIFwiLFxuICAgICAgICAgICAgICAgIG51bWVyaWNJbnB1dDogITEsXG4gICAgICAgICAgICAgICAgcmlnaHRBbGlnbjogITEsXG4gICAgICAgICAgICAgICAgdW5kb09uRXNjYXBlOiAhMCxcbiAgICAgICAgICAgICAgICByYWRpeFBvaW50OiBcIlwiLFxuICAgICAgICAgICAgICAgIF9yYWRpeERhbmNlOiAhMSxcbiAgICAgICAgICAgICAgICBncm91cFNlcGFyYXRvcjogXCJcIixcbiAgICAgICAgICAgICAgICBrZWVwU3RhdGljOiBudWxsLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uQ2FyZXRPblRhYjogITAsXG4gICAgICAgICAgICAgICAgdGFiVGhyb3VnaDogITEsXG4gICAgICAgICAgICAgICAgc3VwcG9ydHNJbnB1dFR5cGU6IFsgXCJ0ZXh0XCIsIFwidGVsXCIsIFwidXJsXCIsIFwicGFzc3dvcmRcIiwgXCJzZWFyY2hcIiBdLFxuICAgICAgICAgICAgICAgIGlnbm9yYWJsZXM6IFsgOCwgOSwgMTksIDI3LCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQ1LCA0NiwgOTMsIDExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDAsIDIyOSBdLFxuICAgICAgICAgICAgICAgIGlzQ29tcGxldGU6IG51bGwsXG4gICAgICAgICAgICAgICAgcHJlVmFsaWRhdGlvbjogbnVsbCxcbiAgICAgICAgICAgICAgICBwb3N0VmFsaWRhdGlvbjogbnVsbCxcbiAgICAgICAgICAgICAgICBzdGF0aWNEZWZpbml0aW9uU3ltYm9sOiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgaml0TWFza2luZzogITEsXG4gICAgICAgICAgICAgICAgbnVsbGFibGU6ICEwLFxuICAgICAgICAgICAgICAgIGlucHV0RXZlbnRPbmx5OiAhMSxcbiAgICAgICAgICAgICAgICBub1ZhbHVlUGF0Y2hpbmc6ICExLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uQ2FyZXRPbkNsaWNrOiBcImx2cFwiLFxuICAgICAgICAgICAgICAgIGNhc2luZzogbnVsbCxcbiAgICAgICAgICAgICAgICBpbnB1dG1vZGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIGltcG9ydERhdGFBdHRyaWJ1dGVzOiAhMCxcbiAgICAgICAgICAgICAgICBzaGlmdFBvc2l0aW9uczogITBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWZpbml0aW9uczoge1xuICAgICAgICAgICAgICAgIDk6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBcIlswLTlcXHVmZjExLVxcdWZmMTldXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25TeW1ib2w6IFwiKlwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcjogXCJbQS1aYS16XFx1MDQxMC1cXHUwNDRmXFx1MDQwMVxcdTA0NTFcXHhjMC1cXHhmZlxceGI1XVwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uU3ltYm9sOiBcIipcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCIqXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBcIlswLTlcXHVmZjExLVxcdWZmMTlBLVphLXpcXHUwNDEwLVxcdTA0NGZcXHUwNDAxXFx1MDQ1MVxceGMwLVxceGZmXFx4YjVdXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWxpYXNlczoge30sXG4gICAgICAgICAgICBtYXNrc0NhY2hlOiB7fSxcbiAgICAgICAgICAgIG1hc2s6IGZ1bmN0aW9uIG1hc2soZWxlbXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic3RyaW5nXCIgPT0gdHlwZW9mIGVsZW1zICYmIChlbGVtcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1zKSB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGVsZW1zKSksIFxuICAgICAgICAgICAgICAgIGVsZW1zID0gZWxlbXMubm9kZU5hbWUgPyBbIGVsZW1zIF0gOiBlbGVtcywgJC5lYWNoKGVsZW1zLCBmdW5jdGlvbihuZHgsIGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzY29wZWRPcHRzID0gJC5leHRlbmQoITAsIHt9LCB0aGF0Lm9wdHMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW1wb3J0QXR0cmlidXRlT3B0aW9ucyhlbCwgc2NvcGVkT3B0cywgJC5leHRlbmQoITAsIHt9LCB0aGF0LnVzZXJPcHRpb25zKSwgdGhhdC5kYXRhQXR0cmlidXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hc2tzZXQgPSBnZW5lcmF0ZU1hc2tTZXQoc2NvcGVkT3B0cywgdGhhdC5ub01hc2tzQ2FjaGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAwICE9PSBtYXNrc2V0ICYmICh2b2lkIDAgIT09IGVsLmlucHV0bWFzayAmJiAoZWwuaW5wdXRtYXNrLm9wdHMuYXV0b1VubWFzayA9ICEwLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLmlucHV0bWFzay5yZW1vdmUoKSksIGVsLmlucHV0bWFzayA9IG5ldyBJbnB1dG1hc2sodm9pZCAwLCB2b2lkIDAsICEwKSwgZWwuaW5wdXRtYXNrLm9wdHMgPSBzY29wZWRPcHRzLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLmlucHV0bWFzay5ub01hc2tzQ2FjaGUgPSB0aGF0Lm5vTWFza3NDYWNoZSwgZWwuaW5wdXRtYXNrLnVzZXJPcHRpb25zID0gJC5leHRlbmQoITAsIHt9LCB0aGF0LnVzZXJPcHRpb25zKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICBlbC5pbnB1dG1hc2suaXNSVEwgPSBzY29wZWRPcHRzLmlzUlRMIHx8IHNjb3BlZE9wdHMubnVtZXJpY0lucHV0LCBlbC5pbnB1dG1hc2suZWwgPSBlbCwgXG4gICAgICAgICAgICAgICAgICAgICAgICBlbC5pbnB1dG1hc2subWFza3NldCA9IG1hc2tzZXQsICQuZGF0YShlbCwgXCJfaW5wdXRtYXNrX29wdHNcIiwgc2NvcGVkT3B0cyksIG1hc2tTY29wZS5jYWxsKGVsLmlucHV0bWFzaywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogXCJtYXNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLCBlbGVtcyAmJiBlbGVtc1swXSAmJiBlbGVtc1swXS5pbnB1dG1hc2sgfHwgdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcHRpb246IGZ1bmN0aW9uIG9wdGlvbihvcHRpb25zLCBub3JlbWFzaykge1xuICAgICAgICAgICAgICAgIHJldHVybiBcInN0cmluZ1wiID09IHR5cGVvZiBvcHRpb25zID8gdGhpcy5vcHRzW29wdGlvbnNdIDogXCJvYmplY3RcIiA9PT0gX3R5cGVvZihvcHRpb25zKSA/ICgkLmV4dGVuZCh0aGlzLnVzZXJPcHRpb25zLCBvcHRpb25zKSwgXG4gICAgICAgICAgICAgICAgdGhpcy5lbCAmJiAhMCAhPT0gbm9yZW1hc2sgJiYgdGhpcy5tYXNrKHRoaXMuZWwpLCB0aGlzKSA6IHZvaWQgMDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bm1hc2tlZHZhbHVlOiBmdW5jdGlvbiB1bm1hc2tlZHZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFza3NldCA9IHRoaXMubWFza3NldCB8fCBnZW5lcmF0ZU1hc2tTZXQodGhpcy5vcHRzLCB0aGlzLm5vTWFza3NDYWNoZSksIFxuICAgICAgICAgICAgICAgIG1hc2tTY29wZS5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBcInVubWFza2VkdmFsdWVcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hc2tTY29wZS5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBcInJlbW92ZVwiXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0ZW1wdHltYXNrOiBmdW5jdGlvbiBnZXRlbXB0eW1hc2soKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFza3NldCA9IHRoaXMubWFza3NldCB8fCBnZW5lcmF0ZU1hc2tTZXQodGhpcy5vcHRzLCB0aGlzLm5vTWFza3NDYWNoZSksIFxuICAgICAgICAgICAgICAgIG1hc2tTY29wZS5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBcImdldGVtcHR5bWFza1wiXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzTWFza2VkVmFsdWU6IGZ1bmN0aW9uIGhhc01hc2tlZFZhbHVlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5vcHRzLmF1dG9Vbm1hc2s7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNDb21wbGV0ZTogZnVuY3Rpb24gaXNDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXNrc2V0ID0gdGhpcy5tYXNrc2V0IHx8IGdlbmVyYXRlTWFza1NldCh0aGlzLm9wdHMsIHRoaXMubm9NYXNrc0NhY2hlKSwgXG4gICAgICAgICAgICAgICAgbWFza1Njb3BlLmNhbGwodGhpcywge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb246IFwiaXNDb21wbGV0ZVwiXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0bWV0YWRhdGE6IGZ1bmN0aW9uIGdldG1ldGFkYXRhKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hc2tzZXQgPSB0aGlzLm1hc2tzZXQgfHwgZ2VuZXJhdGVNYXNrU2V0KHRoaXMub3B0cywgdGhpcy5ub01hc2tzQ2FjaGUpLCBcbiAgICAgICAgICAgICAgICBtYXNrU2NvcGUuY2FsbCh0aGlzLCB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogXCJnZXRtZXRhZGF0YVwiXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNWYWxpZDogZnVuY3Rpb24gaXNWYWxpZCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hc2tzZXQgPSB0aGlzLm1hc2tzZXQgfHwgZ2VuZXJhdGVNYXNrU2V0KHRoaXMub3B0cywgdGhpcy5ub01hc2tzQ2FjaGUpLCBcbiAgICAgICAgICAgICAgICBtYXNrU2NvcGUuY2FsbCh0aGlzLCB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogXCJpc1ZhbGlkXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZvcm1hdDogZnVuY3Rpb24gZm9ybWF0KHZhbHVlLCBtZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hc2tzZXQgPSB0aGlzLm1hc2tzZXQgfHwgZ2VuZXJhdGVNYXNrU2V0KHRoaXMub3B0cywgdGhpcy5ub01hc2tzQ2FjaGUpLCBcbiAgICAgICAgICAgICAgICBtYXNrU2NvcGUuY2FsbCh0aGlzLCB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogXCJmb3JtYXRcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YTogbWV0YWRhdGFcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRWYWx1ZTogZnVuY3Rpb24gc2V0VmFsdWUodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsICYmICQodGhpcy5lbCkudHJpZ2dlcihcInNldHZhbHVlXCIsIFsgdmFsdWUgXSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYW5hbHlzZU1hc2s6IGFuYWx5c2VNYXNrXG4gICAgICAgIH0sIElucHV0bWFzay5leHRlbmREZWZhdWx0cyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICQuZXh0ZW5kKCEwLCBJbnB1dG1hc2sucHJvdG90eXBlLmRlZmF1bHRzLCBvcHRpb25zKTtcbiAgICAgICAgfSwgSW5wdXRtYXNrLmV4dGVuZERlZmluaXRpb25zID0gZnVuY3Rpb24oZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgJC5leHRlbmQoITAsIElucHV0bWFzay5wcm90b3R5cGUuZGVmaW5pdGlvbnMsIGRlZmluaXRpb24pO1xuICAgICAgICB9LCBJbnB1dG1hc2suZXh0ZW5kQWxpYXNlcyA9IGZ1bmN0aW9uKGFsaWFzKSB7XG4gICAgICAgICAgICAkLmV4dGVuZCghMCwgSW5wdXRtYXNrLnByb3RvdHlwZS5hbGlhc2VzLCBhbGlhcyk7XG4gICAgICAgIH0sIElucHV0bWFzay5mb3JtYXQgPSBmdW5jdGlvbih2YWx1ZSwgb3B0aW9ucywgbWV0YWRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBJbnB1dG1hc2sob3B0aW9ucykuZm9ybWF0KHZhbHVlLCBtZXRhZGF0YSk7XG4gICAgICAgIH0sIElucHV0bWFzay51bm1hc2sgPSBmdW5jdGlvbih2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIElucHV0bWFzayhvcHRpb25zKS51bm1hc2tlZHZhbHVlKHZhbHVlKTtcbiAgICAgICAgfSwgSW5wdXRtYXNrLmlzVmFsaWQgPSBmdW5jdGlvbih2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIElucHV0bWFzayhvcHRpb25zKS5pc1ZhbGlkKHZhbHVlKTtcbiAgICAgICAgfSwgSW5wdXRtYXNrLnJlbW92ZSA9IGZ1bmN0aW9uKGVsZW1zKSB7XG4gICAgICAgICAgICBcInN0cmluZ1wiID09IHR5cGVvZiBlbGVtcyAmJiAoZWxlbXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtcykgfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlbGVtcykpLCBcbiAgICAgICAgICAgIGVsZW1zID0gZWxlbXMubm9kZU5hbWUgPyBbIGVsZW1zIF0gOiBlbGVtcywgJC5lYWNoKGVsZW1zLCBmdW5jdGlvbihuZHgsIGVsKSB7XG4gICAgICAgICAgICAgICAgZWwuaW5wdXRtYXNrICYmIGVsLmlucHV0bWFzay5yZW1vdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBJbnB1dG1hc2suc2V0VmFsdWUgPSBmdW5jdGlvbihlbGVtcywgdmFsdWUpIHtcbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT0gdHlwZW9mIGVsZW1zICYmIChlbGVtcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1zKSB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGVsZW1zKSksIFxuICAgICAgICAgICAgZWxlbXMgPSBlbGVtcy5ub2RlTmFtZSA/IFsgZWxlbXMgXSA6IGVsZW1zLCAkLmVhY2goZWxlbXMsIGZ1bmN0aW9uKG5keCwgZWwpIHtcbiAgICAgICAgICAgICAgICBlbC5pbnB1dG1hc2sgPyBlbC5pbnB1dG1hc2suc2V0VmFsdWUodmFsdWUpIDogJChlbCkudHJpZ2dlcihcInNldHZhbHVlXCIsIFsgdmFsdWUgXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGVzY2FwZVJlZ2V4UmVnZXggPSBuZXcgUmVnRXhwKFwiKFxcXFxcIiArIFsgXCIvXCIsIFwiLlwiLCBcIipcIiwgXCIrXCIsIFwiP1wiLCBcInxcIiwgXCIoXCIsIFwiKVwiLCBcIltcIiwgXCJdXCIsIFwie1wiLCBcIn1cIiwgXCJcXFxcXCIsIFwiJFwiLCBcIl5cIiBdLmpvaW4oXCJ8XFxcXFwiKSArIFwiKVwiLCBcImdpbVwiKTtcbiAgICAgICAgSW5wdXRtYXNrLmVzY2FwZVJlZ2V4ID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoZXNjYXBlUmVnZXhSZWdleCwgXCJcXFxcJDFcIik7XG4gICAgICAgIH0sIElucHV0bWFzay5kZXBlbmRlbmN5TGliID0gJCwgd2luZG93LklucHV0bWFzayA9IElucHV0bWFzaywgbW9kdWxlLmV4cG9ydHMgPSBJbnB1dG1hc2s7XG4gICAgfSwgZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICB2YXIganF1ZXJ5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbiAgICAgICAgaWYgKHZvaWQgMCA9PT0ganF1ZXJ5KSB0aHJvdyBcImpRdWVyeSBub3QgbG9hZGVkIVwiO1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGpxdWVyeTtcbiAgICB9LCBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18zX187XG4gICAgfSwgZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICB2YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187XG4gICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gICAgICAgICAgICB9IDogZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICAgICAgICAgICAgfSwgX3R5cGVvZihvYmopO1xuICAgICAgICB9XG4gICAgICAgIF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2Ygd2luZG93ID8gd2luZG93IDogbmV3IChldmFsKFwicmVxdWlyZSgnanNkb20nKS5KU0RPTVwiKSkoXCJcIikud2luZG93O1xuICAgICAgICB9LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXywgZXhwb3J0cywgbW9kdWxlKSwgdm9pZCAwID09PSBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyB8fCAobW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyk7XG4gICAgfSwgZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICB2YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4gICAgICAgIGZ1bmN0aW9uIGdlbmVyYXRlTWFza1NldChvcHRzLCBub2NhY2hlKSB7XG4gICAgICAgICAgICB2YXIgbXM7XG4gICAgICAgICAgICBmdW5jdGlvbiBnZW5lcmF0ZU1hc2sobWFzaywgbWV0YWRhdGEsIG9wdHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVnZXhNYXNrID0gITEsIG1hc2tzZXREZWZpbml0aW9uLCBtYXNrZGVmS2V5O1xuICAgICAgICAgICAgICAgIGlmIChudWxsICE9PSBtYXNrICYmIFwiXCIgIT09IG1hc2sgfHwgKHJlZ2V4TWFzayA9IG51bGwgIT09IG9wdHMucmVnZXgsIG1hc2sgPSByZWdleE1hc2sgPyAobWFzayA9IG9wdHMucmVnZXgsIFxuICAgICAgICAgICAgICAgIG1hc2sucmVwbGFjZSgvXihcXF4pKC4qKShcXCQpJC8sIFwiJDJcIikpIDogKHJlZ2V4TWFzayA9ICEwLCBcIi4qXCIpKSwgMSA9PT0gbWFzay5sZW5ndGggJiYgITEgPT09IG9wdHMuZ3JlZWR5ICYmIDAgIT09IG9wdHMucmVwZWF0ICYmIChvcHRzLnBsYWNlaG9sZGVyID0gXCJcIiksIFxuICAgICAgICAgICAgICAgIDAgPCBvcHRzLnJlcGVhdCB8fCBcIipcIiA9PT0gb3B0cy5yZXBlYXQgfHwgXCIrXCIgPT09IG9wdHMucmVwZWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXBlYXRTdGFydCA9IFwiKlwiID09PSBvcHRzLnJlcGVhdCA/IDAgOiBcIitcIiA9PT0gb3B0cy5yZXBlYXQgPyAxIDogb3B0cy5yZXBlYXQ7XG4gICAgICAgICAgICAgICAgICAgIG1hc2sgPSBvcHRzLmdyb3VwbWFya2VyWzBdICsgbWFzayArIG9wdHMuZ3JvdXBtYXJrZXJbMV0gKyBvcHRzLnF1YW50aWZpZXJtYXJrZXJbMF0gKyByZXBlYXRTdGFydCArIFwiLFwiICsgb3B0cy5yZXBlYXQgKyBvcHRzLnF1YW50aWZpZXJtYXJrZXJbMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBtYXNrZGVmS2V5ID0gcmVnZXhNYXNrID8gXCJyZWdleF9cIiArIG9wdHMucmVnZXggOiBvcHRzLm51bWVyaWNJbnB1dCA/IG1hc2suc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIikgOiBtYXNrLCBcbiAgICAgICAgICAgICAgICAhMSAhPT0gb3B0cy5rZWVwU3RhdGljICYmIChtYXNrZGVmS2V5ID0gXCJrc19cIiArIG1hc2tkZWZLZXkpLCB2b2lkIDAgPT09IElucHV0bWFzay5wcm90b3R5cGUubWFza3NDYWNoZVttYXNrZGVmS2V5XSB8fCAhMCA9PT0gbm9jYWNoZSA/IChtYXNrc2V0RGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgbWFzazogbWFzayxcbiAgICAgICAgICAgICAgICAgICAgbWFza1Rva2VuOiBJbnB1dG1hc2sucHJvdG90eXBlLmFuYWx5c2VNYXNrKG1hc2ssIHJlZ2V4TWFzaywgb3B0cyksXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkUG9zaXRpb25zOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgX2J1ZmZlcjogdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgICBidWZmZXI6IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICAgdGVzdHM6IHt9LFxuICAgICAgICAgICAgICAgICAgICBleGNsdWRlczoge30sXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgbWFza0xlbmd0aDogdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgICBqaXRPZmZzZXQ6IHt9XG4gICAgICAgICAgICAgICAgfSwgITAgIT09IG5vY2FjaGUgJiYgKElucHV0bWFzay5wcm90b3R5cGUubWFza3NDYWNoZVttYXNrZGVmS2V5XSA9IG1hc2tzZXREZWZpbml0aW9uLCBcbiAgICAgICAgICAgICAgICBtYXNrc2V0RGVmaW5pdGlvbiA9ICQuZXh0ZW5kKCEwLCB7fSwgSW5wdXRtYXNrLnByb3RvdHlwZS5tYXNrc0NhY2hlW21hc2tkZWZLZXldKSkpIDogbWFza3NldERlZmluaXRpb24gPSAkLmV4dGVuZCghMCwge30sIElucHV0bWFzay5wcm90b3R5cGUubWFza3NDYWNoZVttYXNrZGVmS2V5XSksIFxuICAgICAgICAgICAgICAgIG1hc2tzZXREZWZpbml0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCQuaXNGdW5jdGlvbihvcHRzLm1hc2spICYmIChvcHRzLm1hc2sgPSBvcHRzLm1hc2sob3B0cykpLCAkLmlzQXJyYXkob3B0cy5tYXNrKSkge1xuICAgICAgICAgICAgICAgIGlmICgxIDwgb3B0cy5tYXNrLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBudWxsID09PSBvcHRzLmtlZXBTdGF0aWMgJiYgKG9wdHMua2VlcFN0YXRpYyA9ICEwKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFsdE1hc2sgPSBvcHRzLmdyb3VwbWFya2VyWzBdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5lYWNoKG9wdHMuaXNSVEwgPyBvcHRzLm1hc2sucmV2ZXJzZSgpIDogb3B0cy5tYXNrLCBmdW5jdGlvbihuZHgsIG1zaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgMSA8IGFsdE1hc2subGVuZ3RoICYmIChhbHRNYXNrICs9IG9wdHMuZ3JvdXBtYXJrZXJbMV0gKyBvcHRzLmFsdGVybmF0b3JtYXJrZXIgKyBvcHRzLmdyb3VwbWFya2VyWzBdKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICB2b2lkIDAgPT09IG1zay5tYXNrIHx8ICQuaXNGdW5jdGlvbihtc2subWFzaykgPyBhbHRNYXNrICs9IG1zayA6IGFsdE1hc2sgKz0gbXNrLm1hc2s7XG4gICAgICAgICAgICAgICAgICAgIH0pLCBhbHRNYXNrICs9IG9wdHMuZ3JvdXBtYXJrZXJbMV0sIGdlbmVyYXRlTWFzayhhbHRNYXNrLCBvcHRzLm1hc2ssIG9wdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcHRzLm1hc2sgPSBvcHRzLm1hc2sucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbCA9PT0gb3B0cy5rZWVwU3RhdGljICYmIChvcHRzLmtlZXBTdGF0aWMgPSAhMSksIG1zID0gb3B0cy5tYXNrICYmIHZvaWQgMCAhPT0gb3B0cy5tYXNrLm1hc2sgJiYgISQuaXNGdW5jdGlvbihvcHRzLm1hc2subWFzaykgPyBnZW5lcmF0ZU1hc2sob3B0cy5tYXNrLm1hc2ssIG9wdHMubWFzaywgb3B0cykgOiBnZW5lcmF0ZU1hc2sob3B0cy5tYXNrLCBvcHRzLm1hc2ssIG9wdHMpLCBcbiAgICAgICAgICAgIG1zO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFuYWx5c2VNYXNrKG1hc2ssIHJlZ2V4TWFzaywgb3B0cykge1xuICAgICAgICAgICAgdmFyIHRva2VuaXplciA9IC8oPzpbPyorXXxcXHtbMC05KypdKyg/OixbMC05KypdKik/KD86XFx8WzAtOSsqXSopP1xcfSl8W14uPyorXiR7W10oKXxcXFxcXSt8Li9nLCByZWdleFRva2VuaXplciA9IC9cXFtcXF4/XT8oPzpbXlxcXFxcXF1dK3xcXFxcW1xcU1xcc10/KSpdP3xcXFxcKD86MCg/OlswLTNdWzAtN117MCwyfXxbNC03XVswLTddPyk/fFsxLTldWzAtOV0qfHhbMC05QS1GYS1mXXsyfXx1WzAtOUEtRmEtZl17NH18Y1tBLVphLXpdfFtcXFNcXHNdPyl8XFwoKD86XFw/Wzo9IV0/KT98KD86Wz8qK118XFx7WzAtOV0rKD86LFswLTldKik/XFx9KVxcPz98W14uPyorXiR7WygpfFxcXFxdK3wuL2csIGVzY2FwZWQgPSAhMSwgY3VycmVudFRva2VuID0gbmV3IE1hc2tUb2tlbigpLCBtYXRjaCwgbSwgb3BlbmVuaW5ncyA9IFtdLCBtYXNrVG9rZW5zID0gW10sIG9wZW5pbmdUb2tlbiwgY3VycmVudE9wZW5pbmdUb2tlbiwgYWx0ZXJuYXRvciwgbGFzdE1hdGNoLCBjbG9zZVJlZ2V4R3JvdXAgPSAhMTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIE1hc2tUb2tlbihpc0dyb3VwLCBpc09wdGlvbmFsLCBpc1F1YW50aWZpZXIsIGlzQWx0ZXJuYXRvcikge1xuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlcyA9IFtdLCB0aGlzLm9wZW5Hcm91cCA9IGlzR3JvdXAgfHwgITEsIHRoaXMuYWx0ZXJuYXRvckdyb3VwID0gITEsIHRoaXMuaXNHcm91cCA9IGlzR3JvdXAgfHwgITEsIFxuICAgICAgICAgICAgICAgIHRoaXMuaXNPcHRpb25hbCA9IGlzT3B0aW9uYWwgfHwgITEsIHRoaXMuaXNRdWFudGlmaWVyID0gaXNRdWFudGlmaWVyIHx8ICExLCB0aGlzLmlzQWx0ZXJuYXRvciA9IGlzQWx0ZXJuYXRvciB8fCAhMSwgXG4gICAgICAgICAgICAgICAgdGhpcy5xdWFudGlmaWVyID0ge1xuICAgICAgICAgICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICAgICAgICAgIG1heDogMVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpbnNlcnRUZXN0RGVmaW5pdGlvbihtdG9rZW4sIGVsZW1lbnQsIHBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb24gPSB2b2lkIDAgIT09IHBvc2l0aW9uID8gcG9zaXRpb24gOiBtdG9rZW4ubWF0Y2hlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdmFyIHByZXZNYXRjaCA9IG10b2tlbi5tYXRjaGVzW3Bvc2l0aW9uIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKHJlZ2V4TWFzaykgMCA9PT0gZWxlbWVudC5pbmRleE9mKFwiW1wiKSB8fCBlc2NhcGVkICYmIC9cXFxcZHxcXFxcc3xcXFxcd10vaS50ZXN0KGVsZW1lbnQpIHx8IFwiLlwiID09PSBlbGVtZW50ID8gbXRva2VuLm1hdGNoZXMuc3BsaWNlKHBvc2l0aW9uKyssIDAsIHtcbiAgICAgICAgICAgICAgICAgICAgZm46IG5ldyBSZWdFeHAoZWxlbWVudCwgb3B0cy5jYXNpbmcgPyBcImlcIiA6IFwiXCIpLFxuICAgICAgICAgICAgICAgICAgICBzdGF0aWM6ICExLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25hbGl0eTogITEsXG4gICAgICAgICAgICAgICAgICAgIG5ld0Jsb2NrTWFya2VyOiB2b2lkIDAgPT09IHByZXZNYXRjaCA/IFwibWFzdGVyXCIgOiBwcmV2TWF0Y2guZGVmICE9PSBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBjYXNpbmc6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRlZjogZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICAgbmF0aXZlRGVmOiBlbGVtZW50XG4gICAgICAgICAgICAgICAgfSkgOiAoZXNjYXBlZCAmJiAoZWxlbWVudCA9IGVsZW1lbnRbZWxlbWVudC5sZW5ndGggLSAxXSksICQuZWFjaChlbGVtZW50LnNwbGl0KFwiXCIpLCBmdW5jdGlvbihuZHgsIGxtbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldk1hdGNoID0gbXRva2VuLm1hdGNoZXNbcG9zaXRpb24gLSAxXSwgbXRva2VuLm1hdGNoZXMuc3BsaWNlKHBvc2l0aW9uKyssIDAsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuOiAvW2Etel0vaS50ZXN0KG9wdHMuc3RhdGljRGVmaW5pdGlvblN5bWJvbCB8fCBsbW50KSA/IG5ldyBSZWdFeHAoXCJbXCIgKyAob3B0cy5zdGF0aWNEZWZpbml0aW9uU3ltYm9sIHx8IGxtbnQpICsgXCJdXCIsIG9wdHMuY2FzaW5nID8gXCJpXCIgOiBcIlwiKSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWM6ICEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxpdHk6ICExLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3QmxvY2tNYXJrZXI6IHZvaWQgMCA9PT0gcHJldk1hdGNoID8gXCJtYXN0ZXJcIiA6IHByZXZNYXRjaC5kZWYgIT09IGxtbnQgJiYgITAgIT09IHByZXZNYXRjaC5zdGF0aWMsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbmc6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWY6IG9wdHMuc3RhdGljRGVmaW5pdGlvblN5bWJvbCB8fCBsbW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHZvaWQgMCAhPT0gb3B0cy5zdGF0aWNEZWZpbml0aW9uU3ltYm9sID8gbG1udCA6IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZURlZjogKGVzY2FwZWQgPyBcIidcIiA6IFwiXCIpICsgbG1udFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KSksIGVzY2FwZWQgPSAhMTsgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXNrZGVmID0gKG9wdHMuZGVmaW5pdGlvbnMgPyBvcHRzLmRlZmluaXRpb25zW2VsZW1lbnRdIDogdm9pZCAwKSB8fCBJbnB1dG1hc2sucHJvdG90eXBlLmRlZmluaXRpb25zW2VsZW1lbnRdO1xuICAgICAgICAgICAgICAgICAgICBtYXNrZGVmICYmICFlc2NhcGVkID8gbXRva2VuLm1hdGNoZXMuc3BsaWNlKHBvc2l0aW9uKyssIDAsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuOiBtYXNrZGVmLnZhbGlkYXRvciA/IFwic3RyaW5nXCIgPT0gdHlwZW9mIG1hc2tkZWYudmFsaWRhdG9yID8gbmV3IFJlZ0V4cChtYXNrZGVmLnZhbGlkYXRvciwgb3B0cy5jYXNpbmcgPyBcImlcIiA6IFwiXCIpIDogbmV3IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGVzdCA9IG1hc2tkZWYudmFsaWRhdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSgpIDogbmV3IFJlZ0V4cChcIi5cIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWM6IG1hc2tkZWYuc3RhdGljIHx8ICExLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxpdHk6ICExLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3QmxvY2tNYXJrZXI6IHZvaWQgMCA9PT0gcHJldk1hdGNoID8gXCJtYXN0ZXJcIiA6IHByZXZNYXRjaC5kZWYgIT09IChtYXNrZGVmLmRlZmluaXRpb25TeW1ib2wgfHwgZWxlbWVudCksXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbmc6IG1hc2tkZWYuY2FzaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmOiBtYXNrZGVmLmRlZmluaXRpb25TeW1ib2wgfHwgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBtYXNrZGVmLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlRGVmOiBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkOiBtYXNrZGVmLmdlbmVyYXRlZFxuICAgICAgICAgICAgICAgICAgICB9KSA6IChtdG9rZW4ubWF0Y2hlcy5zcGxpY2UocG9zaXRpb24rKywgMCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm46IC9bYS16XS9pLnRlc3Qob3B0cy5zdGF0aWNEZWZpbml0aW9uU3ltYm9sIHx8IGVsZW1lbnQpID8gbmV3IFJlZ0V4cChcIltcIiArIChvcHRzLnN0YXRpY0RlZmluaXRpb25TeW1ib2wgfHwgZWxlbWVudCkgKyBcIl1cIiwgb3B0cy5jYXNpbmcgPyBcImlcIiA6IFwiXCIpIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYzogITAsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbGl0eTogITEsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdCbG9ja01hcmtlcjogdm9pZCAwID09PSBwcmV2TWF0Y2ggPyBcIm1hc3RlclwiIDogcHJldk1hdGNoLmRlZiAhPT0gZWxlbWVudCAmJiAhMCAhPT0gcHJldk1hdGNoLnN0YXRpYyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2luZzogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZjogb3B0cy5zdGF0aWNEZWZpbml0aW9uU3ltYm9sIHx8IGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogdm9pZCAwICE9PSBvcHRzLnN0YXRpY0RlZmluaXRpb25TeW1ib2wgPyBlbGVtZW50IDogdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlRGVmOiAoZXNjYXBlZCA/IFwiJ1wiIDogXCJcIikgKyBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIH0pLCBlc2NhcGVkID0gITEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHZlcmlmeUdyb3VwTWFya2VyKG1hc2tUb2tlbikge1xuICAgICAgICAgICAgICAgIG1hc2tUb2tlbiAmJiBtYXNrVG9rZW4ubWF0Y2hlcyAmJiAkLmVhY2gobWFza1Rva2VuLm1hdGNoZXMsIGZ1bmN0aW9uKG5keCwgdG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRUb2tlbiA9IG1hc2tUb2tlbi5tYXRjaGVzW25keCArIDFdO1xuICAgICAgICAgICAgICAgICAgICAodm9pZCAwID09PSBuZXh0VG9rZW4gfHwgdm9pZCAwID09PSBuZXh0VG9rZW4ubWF0Y2hlcyB8fCAhMSA9PT0gbmV4dFRva2VuLmlzUXVhbnRpZmllcikgJiYgdG9rZW4gJiYgdG9rZW4uaXNHcm91cCAmJiAodG9rZW4uaXNHcm91cCA9ICExLCBcbiAgICAgICAgICAgICAgICAgICAgcmVnZXhNYXNrIHx8IChpbnNlcnRUZXN0RGVmaW5pdGlvbih0b2tlbiwgb3B0cy5ncm91cG1hcmtlclswXSwgMCksICEwICE9PSB0b2tlbi5vcGVuR3JvdXAgJiYgaW5zZXJ0VGVzdERlZmluaXRpb24odG9rZW4sIG9wdHMuZ3JvdXBtYXJrZXJbMV0pKSksIFxuICAgICAgICAgICAgICAgICAgICB2ZXJpZnlHcm91cE1hcmtlcih0b2tlbik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0Q2FzZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoMCA8IG9wZW5lbmluZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50T3BlbmluZ1Rva2VuID0gb3BlbmVuaW5nc1tvcGVuZW5pbmdzLmxlbmd0aCAtIDFdLCBpbnNlcnRUZXN0RGVmaW5pdGlvbihjdXJyZW50T3BlbmluZ1Rva2VuLCBtKSwgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPcGVuaW5nVG9rZW4uaXNBbHRlcm5hdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdG9yID0gb3BlbmVuaW5ncy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG1uZHggPSAwOyBtbmR4IDwgYWx0ZXJuYXRvci5tYXRjaGVzLmxlbmd0aDsgbW5keCsrKSBhbHRlcm5hdG9yLm1hdGNoZXNbbW5keF0uaXNHcm91cCAmJiAoYWx0ZXJuYXRvci5tYXRjaGVzW21uZHhdLmlzR3JvdXAgPSAhMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAwIDwgb3BlbmVuaW5ncy5sZW5ndGggPyAoY3VycmVudE9wZW5pbmdUb2tlbiA9IG9wZW5lbmluZ3Nbb3BlbmVuaW5ncy5sZW5ndGggLSAxXSwgXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50T3BlbmluZ1Rva2VuLm1hdGNoZXMucHVzaChhbHRlcm5hdG9yKSkgOiBjdXJyZW50VG9rZW4ubWF0Y2hlcy5wdXNoKGFsdGVybmF0b3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGluc2VydFRlc3REZWZpbml0aW9uKGN1cnJlbnRUb2tlbiwgbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZXZlcnNlVG9rZW5zKG1hc2tUb2tlbikge1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJldmVyc2VTdGF0aWMoc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ID09PSBvcHRzLm9wdGlvbmFsbWFya2VyWzBdID8gc3QgPSBvcHRzLm9wdGlvbmFsbWFya2VyWzFdIDogc3QgPT09IG9wdHMub3B0aW9uYWxtYXJrZXJbMV0gPyBzdCA9IG9wdHMub3B0aW9uYWxtYXJrZXJbMF0gOiBzdCA9PT0gb3B0cy5ncm91cG1hcmtlclswXSA/IHN0ID0gb3B0cy5ncm91cG1hcmtlclsxXSA6IHN0ID09PSBvcHRzLmdyb3VwbWFya2VyWzFdICYmIChzdCA9IG9wdHMuZ3JvdXBtYXJrZXJbMF0pLCBcbiAgICAgICAgICAgICAgICAgICAgc3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAodmFyIG1hdGNoIGluIG1hc2tUb2tlbi5tYXRjaGVzID0gbWFza1Rva2VuLm1hdGNoZXMucmV2ZXJzZSgpLCBtYXNrVG9rZW4ubWF0Y2hlcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtYXNrVG9rZW4ubWF0Y2hlcywgbWF0Y2gpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbnRNYXRjaCA9IHBhcnNlSW50KG1hdGNoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hc2tUb2tlbi5tYXRjaGVzW21hdGNoXS5pc1F1YW50aWZpZXIgJiYgbWFza1Rva2VuLm1hdGNoZXNbaW50TWF0Y2ggKyAxXSAmJiBtYXNrVG9rZW4ubWF0Y2hlc1tpbnRNYXRjaCArIDFdLmlzR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdCA9IG1hc2tUb2tlbi5tYXRjaGVzW21hdGNoXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tUb2tlbi5tYXRjaGVzLnNwbGljZShtYXRjaCwgMSksIG1hc2tUb2tlbi5tYXRjaGVzLnNwbGljZShpbnRNYXRjaCArIDEsIDAsIHF0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2b2lkIDAgIT09IG1hc2tUb2tlbi5tYXRjaGVzW21hdGNoXS5tYXRjaGVzID8gbWFza1Rva2VuLm1hdGNoZXNbbWF0Y2hdID0gcmV2ZXJzZVRva2VucyhtYXNrVG9rZW4ubWF0Y2hlc1ttYXRjaF0pIDogbWFza1Rva2VuLm1hdGNoZXNbbWF0Y2hdID0gcmV2ZXJzZVN0YXRpYyhtYXNrVG9rZW4ubWF0Y2hlc1ttYXRjaF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbWFza1Rva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZ3JvdXBpZnkobWF0Y2hlcykge1xuICAgICAgICAgICAgICAgIHZhciBncm91cFRva2VuID0gbmV3IE1hc2tUb2tlbighMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyb3VwVG9rZW4ub3Blbkdyb3VwID0gITEsIGdyb3VwVG9rZW4ubWF0Y2hlcyA9IG1hdGNoZXMsIGdyb3VwVG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjbG9zZUdyb3VwKCkge1xuICAgICAgICAgICAgICAgIGlmIChvcGVuaW5nVG9rZW4gPSBvcGVuZW5pbmdzLnBvcCgpLCBvcGVuaW5nVG9rZW4ub3Blbkdyb3VwID0gITEsIHZvaWQgMCAhPT0gb3BlbmluZ1Rva2VuKSBpZiAoMCA8IG9wZW5lbmluZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50T3BlbmluZ1Rva2VuID0gb3BlbmVuaW5nc1tvcGVuZW5pbmdzLmxlbmd0aCAtIDFdLCBjdXJyZW50T3BlbmluZ1Rva2VuLm1hdGNoZXMucHVzaChvcGVuaW5nVG9rZW4pLCBcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE9wZW5pbmdUb2tlbi5pc0FsdGVybmF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVybmF0b3IgPSBvcGVuZW5pbmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbW5keCA9IDA7IG1uZHggPCBhbHRlcm5hdG9yLm1hdGNoZXMubGVuZ3RoOyBtbmR4KyspIGFsdGVybmF0b3IubWF0Y2hlc1ttbmR4XS5pc0dyb3VwID0gITEsIFxuICAgICAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRvci5tYXRjaGVzW21uZHhdLmFsdGVybmF0b3JHcm91cCA9ICExO1xuICAgICAgICAgICAgICAgICAgICAgICAgMCA8IG9wZW5lbmluZ3MubGVuZ3RoID8gKGN1cnJlbnRPcGVuaW5nVG9rZW4gPSBvcGVuZW5pbmdzW29wZW5lbmluZ3MubGVuZ3RoIC0gMV0sIFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE9wZW5pbmdUb2tlbi5tYXRjaGVzLnB1c2goYWx0ZXJuYXRvcikpIDogY3VycmVudFRva2VuLm1hdGNoZXMucHVzaChhbHRlcm5hdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBjdXJyZW50VG9rZW4ubWF0Y2hlcy5wdXNoKG9wZW5pbmdUb2tlbik7IGVsc2UgZGVmYXVsdENhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdyb3VwUXVhbnRpZmllcihtYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhc3RNYXRjaCA9IG1hdGNoZXMucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RNYXRjaC5pc1F1YW50aWZpZXIgJiYgKGxhc3RNYXRjaCA9IGdyb3VwaWZ5KFsgbWF0Y2hlcy5wb3AoKSwgbGFzdE1hdGNoIF0pKSwgXG4gICAgICAgICAgICAgICAgbGFzdE1hdGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChyZWdleE1hc2sgJiYgKG9wdHMub3B0aW9uYWxtYXJrZXJbMF0gPSB2b2lkIDAsIG9wdHMub3B0aW9uYWxtYXJrZXJbMV0gPSB2b2lkIDApOyBtYXRjaCA9IHJlZ2V4TWFzayA/IHJlZ2V4VG9rZW5pemVyLmV4ZWMobWFzaykgOiB0b2tlbml6ZXIuZXhlYyhtYXNrKTsgKSB7XG4gICAgICAgICAgICAgICAgaWYgKG0gPSBtYXRjaFswXSwgcmVnZXhNYXNrKSBzd2l0Y2ggKG0uY2hhckF0KDApKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiP1wiOlxuICAgICAgICAgICAgICAgICAgICBtID0gXCJ7MCwxfVwiO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgY2FzZSBcIitcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCIqXCI6XG4gICAgICAgICAgICAgICAgICAgIG0gPSBcIntcIiArIG0gKyBcIn1cIjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJ8XCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBvcGVuZW5pbmdzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFsdFJlZ2V4R3JvdXAgPSBncm91cGlmeShjdXJyZW50VG9rZW4ubWF0Y2hlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbHRSZWdleEdyb3VwLm9wZW5Hcm91cCA9ICEwLCBvcGVuZW5pbmdzLnB1c2goYWx0UmVnZXhHcm91cCksIGN1cnJlbnRUb2tlbi5tYXRjaGVzID0gW10sIFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VSZWdleEdyb3VwID0gITA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlc2NhcGVkKSBkZWZhdWx0Q2FzZSgpOyBlbHNlIHN3aXRjaCAobS5jaGFyQXQoMCkpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCIoPz1cIjpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGNhc2UgXCIoPyFcIjpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGNhc2UgXCIoPzw9XCI6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBjYXNlIFwiKD88IVwiOlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgY2FzZSBvcHRzLmVzY2FwZUNoYXI6XG4gICAgICAgICAgICAgICAgICAgIGVzY2FwZWQgPSAhMCwgcmVnZXhNYXNrICYmIGRlZmF1bHRDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBjYXNlIG9wdHMub3B0aW9uYWxtYXJrZXJbMV06XG4gICAgICAgICAgICAgICAgICBjYXNlIG9wdHMuZ3JvdXBtYXJrZXJbMV06XG4gICAgICAgICAgICAgICAgICAgIGNsb3NlR3JvdXAoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGNhc2Ugb3B0cy5vcHRpb25hbG1hcmtlclswXTpcbiAgICAgICAgICAgICAgICAgICAgb3BlbmVuaW5ncy5wdXNoKG5ldyBNYXNrVG9rZW4oITEsICEwKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBjYXNlIG9wdHMuZ3JvdXBtYXJrZXJbMF06XG4gICAgICAgICAgICAgICAgICAgIG9wZW5lbmluZ3MucHVzaChuZXcgTWFza1Rva2VuKCEwKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBjYXNlIG9wdHMucXVhbnRpZmllcm1hcmtlclswXTpcbiAgICAgICAgICAgICAgICAgICAgdmFyIHF1YW50aWZpZXIgPSBuZXcgTWFza1Rva2VuKCExLCAhMSwgITApO1xuICAgICAgICAgICAgICAgICAgICBtID0gbS5yZXBsYWNlKC9be31dL2csIFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbXFqID0gbS5zcGxpdChcInxcIiksIG1xID0gbXFqWzBdLnNwbGl0KFwiLFwiKSwgbXEwID0gaXNOYU4obXFbMF0pID8gbXFbMF0gOiBwYXJzZUludChtcVswXSksIG1xMSA9IDEgPT09IG1xLmxlbmd0aCA/IG1xMCA6IGlzTmFOKG1xWzFdKSA/IG1xWzFdIDogcGFyc2VJbnQobXFbMV0pO1xuICAgICAgICAgICAgICAgICAgICBcIipcIiAhPT0gbXEwICYmIFwiK1wiICE9PSBtcTAgfHwgKG1xMCA9IFwiKlwiID09PSBtcTEgPyAwIDogMSksIHF1YW50aWZpZXIucXVhbnRpZmllciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogbXEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4OiBtcTEsXG4gICAgICAgICAgICAgICAgICAgICAgICBqaXQ6IG1xalsxXVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IDAgPCBvcGVuZW5pbmdzLmxlbmd0aCA/IG9wZW5lbmluZ3Nbb3BlbmVuaW5ncy5sZW5ndGggLSAxXS5tYXRjaGVzIDogY3VycmVudFRva2VuLm1hdGNoZXM7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IG1hdGNoZXMucG9wKCksIG1hdGNoLmlzQWx0ZXJuYXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKG1hdGNoKSwgbWF0Y2hlcyA9IG1hdGNoLm1hdGNoZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JvdXBUb2tlbiA9IG5ldyBNYXNrVG9rZW4oITApLCB0bXBNYXRjaCA9IG1hdGNoZXMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLnB1c2goZ3JvdXBUb2tlbiksIG1hdGNoZXMgPSBncm91cFRva2VuLm1hdGNoZXMsIG1hdGNoID0gdG1wTWF0Y2g7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbWF0Y2guaXNHcm91cCB8fCAobWF0Y2ggPSBncm91cGlmeShbIG1hdGNoIF0pKSwgbWF0Y2hlcy5wdXNoKG1hdGNoKSwgbWF0Y2hlcy5wdXNoKHF1YW50aWZpZXIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgY2FzZSBvcHRzLmFsdGVybmF0b3JtYXJrZXI6XG4gICAgICAgICAgICAgICAgICAgIGlmICgwIDwgb3BlbmVuaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPcGVuaW5nVG9rZW4gPSBvcGVuZW5pbmdzW29wZW5lbmluZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ViVG9rZW4gPSBjdXJyZW50T3BlbmluZ1Rva2VuLm1hdGNoZXNbY3VycmVudE9wZW5pbmdUb2tlbi5tYXRjaGVzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE1hdGNoID0gY3VycmVudE9wZW5pbmdUb2tlbi5vcGVuR3JvdXAgJiYgKHZvaWQgMCA9PT0gc3ViVG9rZW4ubWF0Y2hlcyB8fCAhMSA9PT0gc3ViVG9rZW4uaXNHcm91cCAmJiAhMSA9PT0gc3ViVG9rZW4uaXNBbHRlcm5hdG9yKSA/IG9wZW5lbmluZ3MucG9wKCkgOiBncm91cFF1YW50aWZpZXIoY3VycmVudE9wZW5pbmdUb2tlbi5tYXRjaGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGxhc3RNYXRjaCA9IGdyb3VwUXVhbnRpZmllcihjdXJyZW50VG9rZW4ubWF0Y2hlcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0TWF0Y2guaXNBbHRlcm5hdG9yKSBvcGVuZW5pbmdzLnB1c2gobGFzdE1hdGNoKTsgZWxzZSBpZiAobGFzdE1hdGNoLmFsdGVybmF0b3JHcm91cCA/IChhbHRlcm5hdG9yID0gb3BlbmVuaW5ncy5wb3AoKSwgXG4gICAgICAgICAgICAgICAgICAgIGxhc3RNYXRjaC5hbHRlcm5hdG9yR3JvdXAgPSAhMSkgOiBhbHRlcm5hdG9yID0gbmV3IE1hc2tUb2tlbighMSwgITEsICExLCAhMCksIGFsdGVybmF0b3IubWF0Y2hlcy5wdXNoKGxhc3RNYXRjaCksIFxuICAgICAgICAgICAgICAgICAgICBvcGVuZW5pbmdzLnB1c2goYWx0ZXJuYXRvciksIGxhc3RNYXRjaC5vcGVuR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RNYXRjaC5vcGVuR3JvdXAgPSAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbHRlcm5hdG9yR3JvdXAgPSBuZXcgTWFza1Rva2VuKCEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVybmF0b3JHcm91cC5hbHRlcm5hdG9yR3JvdXAgPSAhMCwgb3BlbmVuaW5ncy5wdXNoKGFsdGVybmF0b3JHcm91cCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDYXNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjbG9zZVJlZ2V4R3JvdXAgJiYgY2xvc2VHcm91cCgpOyAwIDwgb3BlbmVuaW5ncy5sZW5ndGg7ICkgb3BlbmluZ1Rva2VuID0gb3BlbmVuaW5ncy5wb3AoKSwgXG4gICAgICAgICAgICBjdXJyZW50VG9rZW4ubWF0Y2hlcy5wdXNoKG9wZW5pbmdUb2tlbik7XG4gICAgICAgICAgICByZXR1cm4gMCA8IGN1cnJlbnRUb2tlbi5tYXRjaGVzLmxlbmd0aCAmJiAodmVyaWZ5R3JvdXBNYXJrZXIoY3VycmVudFRva2VuKSwgbWFza1Rva2Vucy5wdXNoKGN1cnJlbnRUb2tlbikpLCBcbiAgICAgICAgICAgIChvcHRzLm51bWVyaWNJbnB1dCB8fCBvcHRzLmlzUlRMKSAmJiByZXZlcnNlVG9rZW5zKG1hc2tUb2tlbnNbMF0pLCBtYXNrVG9rZW5zO1xuICAgICAgICB9XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICAgICAgZ2VuZXJhdGVNYXNrU2V0OiBnZW5lcmF0ZU1hc2tTZXQsXG4gICAgICAgICAgICBhbmFseXNlTWFzazogYW5hbHlzZU1hc2tcbiAgICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIF9fd2VicGFja19yZXF1aXJlX18oNyksIF9fd2VicGFja19yZXF1aXJlX18oOSksIF9fd2VicGFja19yZXF1aXJlX18oMTApLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKSwgXG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbiAgICB9LCBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHZhciBJbnB1dG1hc2sgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuICAgICAgICBJbnB1dG1hc2suZXh0ZW5kRGVmaW5pdGlvbnMoe1xuICAgICAgICAgICAgQToge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRvcjogXCJbQS1aYS16XFx1MDQxMC1cXHUwNDRmXFx1MDQwMVxcdTA0NTFcXHhjMC1cXHhmZlxceGI1XVwiLFxuICAgICAgICAgICAgICAgIGNhc2luZzogXCJ1cHBlclwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCImXCI6IHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3I6IFwiWzAtOUEtWmEtelxcdTA0MTAtXFx1MDQ0ZlxcdTA0MDFcXHUwNDUxXFx4YzAtXFx4ZmZcXHhiNV1cIixcbiAgICAgICAgICAgICAgICBjYXNpbmc6IFwidXBwZXJcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiI1wiOiB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBcIlswLTlBLUZhLWZdXCIsXG4gICAgICAgICAgICAgICAgY2FzaW5nOiBcInVwcGVyXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBpcFZhbGlkYXRvclJlZ2V4ID0gbmV3IFJlZ0V4cChcIjI1WzAtNV18MlswLTRdWzAtOV18WzAxXVswLTldWzAtOV1cIik7XG4gICAgICAgIGZ1bmN0aW9uIGlwVmFsaWRhdG9yKGNocnMsIG1hc2tzZXQsIHBvcywgc3RyaWN0LCBvcHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hycyA9IC0xIDwgcG9zIC0gMSAmJiBcIi5cIiAhPT0gbWFza3NldC5idWZmZXJbcG9zIC0gMV0gPyAoY2hycyA9IG1hc2tzZXQuYnVmZmVyW3BvcyAtIDFdICsgY2hycywgXG4gICAgICAgICAgICAtMSA8IHBvcyAtIDIgJiYgXCIuXCIgIT09IG1hc2tzZXQuYnVmZmVyW3BvcyAtIDJdID8gbWFza3NldC5idWZmZXJbcG9zIC0gMl0gKyBjaHJzIDogXCIwXCIgKyBjaHJzKSA6IFwiMDBcIiArIGNocnMsIFxuICAgICAgICAgICAgaXBWYWxpZGF0b3JSZWdleC50ZXN0KGNocnMpO1xuICAgICAgICB9XG4gICAgICAgIElucHV0bWFzay5leHRlbmRBbGlhc2VzKHtcbiAgICAgICAgICAgIGNzc3VuaXQ6IHtcbiAgICAgICAgICAgICAgICByZWdleDogXCJbKy1dP1swLTldK1xcXFwuPyhbMC05XSspPyhweHxlbXxyZW18ZXh8JXxpbnxjbXxtbXxwdHxwYylcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVybDoge1xuICAgICAgICAgICAgICAgIHJlZ2V4OiBcIihodHRwcz98ZnRwKS8vLipcIixcbiAgICAgICAgICAgICAgICBhdXRvVW5tYXNrOiAhMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlwOiB7XG4gICAgICAgICAgICAgICAgbWFzazogXCJpW2lbaV1dLmpbaltqXV0ua1trW2tdXS5sW2xbbF1dXCIsXG4gICAgICAgICAgICAgICAgZGVmaW5pdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgaToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBpcFZhbGlkYXRvclxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBqOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3I6IGlwVmFsaWRhdG9yXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGs6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcjogaXBWYWxpZGF0b3JcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBpcFZhbGlkYXRvclxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvblVuTWFzazogZnVuY3Rpb24gb25Vbk1hc2sobWFza2VkVmFsdWUsIHVubWFza2VkVmFsdWUsIG9wdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hc2tlZFZhbHVlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaW5wdXRtb2RlOiBcIm51bWVyaWNcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVtYWlsOiB7XG4gICAgICAgICAgICAgICAgbWFzazogXCIqezEsNjR9Wy4qezEsNjR9XVsuKnsxLDY0fV1bLip7MSw2M31dQC17MSw2M30uLXsxLDYzfVsuLXsxLDYzfV1bLi17MSw2M31dXCIsXG4gICAgICAgICAgICAgICAgZ3JlZWR5OiAhMSxcbiAgICAgICAgICAgICAgICBjYXNpbmc6IFwibG93ZXJcIixcbiAgICAgICAgICAgICAgICBvbkJlZm9yZVBhc3RlOiBmdW5jdGlvbiBvbkJlZm9yZVBhc3RlKHBhc3RlZFZhbHVlLCBvcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXN0ZWRWYWx1ZSA9IHBhc3RlZFZhbHVlLnRvTG93ZXJDYXNlKCksIHBhc3RlZFZhbHVlLnJlcGxhY2UoXCJtYWlsdG86XCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGVmaW5pdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgXCIqXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcjogXCJbMC05XFx1ZmYxMS1cXHVmZjE5QS1aYS16XFx1MDQxMC1cXHUwNDRmXFx1MDQwMVxcdTA0NTFcXHhjMC1cXHhmZlxceGI1ISMkJSYnKisvPT9eX2B7fH1+LV1cIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIi1cIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBcIlswLTlBLVphLXotXVwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uVW5NYXNrOiBmdW5jdGlvbiBvblVuTWFzayhtYXNrZWRWYWx1ZSwgdW5tYXNrZWRWYWx1ZSwgb3B0cykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFza2VkVmFsdWU7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbnB1dG1vZGU6IFwiZW1haWxcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1hYzoge1xuICAgICAgICAgICAgICAgIG1hc2s6IFwiIyM6IyM6IyM6IyM6IyM6IyNcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZpbjoge1xuICAgICAgICAgICAgICAgIG1hc2s6IFwiVnsxM305ezR9XCIsXG4gICAgICAgICAgICAgICAgZGVmaW5pdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgVjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBcIltBLUhKLU5QUi1aYS1oai1ucHItelxcXFxkXVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzaW5nOiBcInVwcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2xlYXJJbmNvbXBsZXRlOiAhMCxcbiAgICAgICAgICAgICAgICBhdXRvVW5tYXNrOiAhMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNzbjoge1xuICAgICAgICAgICAgICAgIG1hc2s6IFwiOTk5LTk5LTk5OTlcIixcbiAgICAgICAgICAgICAgICBwb3N0VmFsaWRhdGlvbjogZnVuY3Rpb24gcG9zdFZhbGlkYXRpb24oYnVmZmVyLCBwb3MsIGMsIGN1cnJlbnRSZXN1bHQsIG9wdHMsIG1hc2tzZXQsIHN0cmljdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gL14oPyEyMTktMDktOTk5OXwwNzgtMDUtMTEyMCkoPyE2NjZ8MDAwfDkuezJ9KS57M30tKD8hMDApLnsyfS0oPyEwezR9KS57NH0kLy50ZXN0KGJ1ZmZlci5qb2luKFwiXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLCBtb2R1bGUuZXhwb3J0cyA9IElucHV0bWFzaztcbiAgICB9LCBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gICAgICAgICAgICB9IDogZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICAgICAgICAgICAgfSwgX3R5cGVvZihvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKSwgd2luZG93ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KSwgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQsIHVhID0gd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCB8fCBcIlwiLCBpZSA9IDAgPCB1YS5pbmRleE9mKFwiTVNJRSBcIikgfHwgMCA8IHVhLmluZGV4T2YoXCJUcmlkZW50L1wiKSwgbW9iaWxlID0gXCJvbnRvdWNoc3RhcnRcIiBpbiB3aW5kb3csIGllbW9iaWxlID0gL2llbW9iaWxlL2kudGVzdCh1YSksIGlwaG9uZSA9IC9pcGhvbmUvaS50ZXN0KHVhKSAmJiAhaWVtb2JpbGUsIGtleUNvZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1hc2tTY29wZShhY3Rpb25PYmosIG1hc2tzZXQsIG9wdHMpIHtcbiAgICAgICAgICAgIG1hc2tzZXQgPSBtYXNrc2V0IHx8IHRoaXMubWFza3NldCwgb3B0cyA9IG9wdHMgfHwgdGhpcy5vcHRzO1xuICAgICAgICAgICAgdmFyIGlucHV0bWFzayA9IHRoaXMsIGVsID0gdGhpcy5lbCwgaXNSVEwgPSB0aGlzLmlzUlRMIHx8ICh0aGlzLmlzUlRMID0gb3B0cy5udW1lcmljSW5wdXQpLCB1bmRvVmFsdWUsICRlbCwgc2tpcEtleVByZXNzRXZlbnQgPSAhMSwgc2tpcElucHV0RXZlbnQgPSAhMSwgdmFsaWRhdGlvbkV2ZW50ID0gITEsIGlnbm9yYWJsZSA9ICExLCBtYXhMZW5ndGgsIG1vdXNlRW50ZXIgPSAhMSwgb3JpZ2luYWxQbGFjZWhvbGRlciA9IHZvaWQgMDtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldE1hc2tUZW1wbGF0ZShiYXNlT25JbnB1dCwgbWluaW1hbFBvcywgaW5jbHVkZU1vZGUsIG5vSml0LCBjbGVhck9wdGlvbmFsVGFpbCkge1xuICAgICAgICAgICAgICAgIHZhciBncmVlZHkgPSBvcHRzLmdyZWVkeTtcbiAgICAgICAgICAgICAgICBjbGVhck9wdGlvbmFsVGFpbCAmJiAob3B0cy5ncmVlZHkgPSAhMSksIG1pbmltYWxQb3MgPSBtaW5pbWFsUG9zIHx8IDA7XG4gICAgICAgICAgICAgICAgdmFyIG1hc2tUZW1wbGF0ZSA9IFtdLCBuZHhJbnRsenIsIHBvcyA9IDAsIHRlc3QsIHRlc3RQb3MsIGppdFJlbmRlclN0YXRpYztcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghMCA9PT0gYmFzZU9uSW5wdXQgJiYgbWFza3NldC52YWxpZFBvc2l0aW9uc1twb3NdKSB0ZXN0UG9zID0gY2xlYXJPcHRpb25hbFRhaWwgJiYgITAgPT09IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcG9zXS5tYXRjaC5vcHRpb25hbGl0eSAmJiB2b2lkIDAgPT09IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcG9zICsgMV0gJiYgKCEwID09PSBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW3Bvc10uZ2VuZXJhdGVkSW5wdXQgfHwgbWFza3NldC52YWxpZFBvc2l0aW9uc1twb3NdLmlucHV0ID09IG9wdHMuc2tpcE9wdGlvbmFsUGFydENoYXJhY3RlciAmJiAwIDwgcG9zKSA/IGRldGVybWluZVRlc3RUZW1wbGF0ZShwb3MsIGdldFRlc3RzKHBvcywgbmR4SW50bHpyLCBwb3MgLSAxKSkgOiBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW3Bvc10sIFxuICAgICAgICAgICAgICAgICAgICB0ZXN0ID0gdGVzdFBvcy5tYXRjaCwgbmR4SW50bHpyID0gdGVzdFBvcy5sb2NhdG9yLnNsaWNlKCksIG1hc2tUZW1wbGF0ZS5wdXNoKCEwID09PSBpbmNsdWRlTW9kZSA/IHRlc3RQb3MuaW5wdXQgOiAhMSA9PT0gaW5jbHVkZU1vZGUgPyB0ZXN0Lm5hdGl2ZURlZiA6IGdldFBsYWNlaG9sZGVyKHBvcywgdGVzdCkpOyBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RQb3MgPSBnZXRUZXN0VGVtcGxhdGUocG9zLCBuZHhJbnRsenIsIHBvcyAtIDEpLCB0ZXN0ID0gdGVzdFBvcy5tYXRjaCwgbmR4SW50bHpyID0gdGVzdFBvcy5sb2NhdG9yLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaml0TWFza2luZyA9ICEwICE9PSBub0ppdCAmJiAoITEgIT09IG9wdHMuaml0TWFza2luZyA/IG9wdHMuaml0TWFza2luZyA6IHRlc3Quaml0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGppdFJlbmRlclN0YXRpYyA9IGppdFJlbmRlclN0YXRpYyAmJiB0ZXN0LnN0YXRpYyAmJiB0ZXN0LmRlZiAhPT0gb3B0cy5ncm91cFNlcGFyYXRvciAmJiBudWxsID09PSB0ZXN0LmZuIHx8IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcG9zIC0gMV0gJiYgdGVzdC5zdGF0aWMgJiYgdGVzdC5kZWYgIT09IG9wdHMuZ3JvdXBTZXBhcmF0b3IgJiYgbnVsbCA9PT0gdGVzdC5mbiwgXG4gICAgICAgICAgICAgICAgICAgICAgICBqaXRSZW5kZXJTdGF0aWMgfHwgITEgPT09IGppdE1hc2tpbmcgfHwgdm9pZCAwID09PSBqaXRNYXNraW5nIHx8IFwibnVtYmVyXCIgPT0gdHlwZW9mIGppdE1hc2tpbmcgJiYgaXNGaW5pdGUoaml0TWFza2luZykgJiYgcG9zIDwgaml0TWFza2luZyA/IG1hc2tUZW1wbGF0ZS5wdXNoKCExID09PSBpbmNsdWRlTW9kZSA/IHRlc3QubmF0aXZlRGVmIDogZ2V0UGxhY2Vob2xkZXIocG9zLCB0ZXN0KSkgOiBqaXRSZW5kZXJTdGF0aWMgPSAhMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwb3MrKztcbiAgICAgICAgICAgICAgICB9IHdoaWxlICgodm9pZCAwID09PSBtYXhMZW5ndGggfHwgcG9zIDwgbWF4TGVuZ3RoKSAmJiAoITAgIT09IHRlc3Quc3RhdGljIHx8IFwiXCIgIT09IHRlc3QuZGVmKSB8fCBwb3MgPCBtaW5pbWFsUG9zKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIiA9PT0gbWFza1RlbXBsYXRlW21hc2tUZW1wbGF0ZS5sZW5ndGggLSAxXSAmJiBtYXNrVGVtcGxhdGUucG9wKCksICExID09PSBpbmNsdWRlTW9kZSAmJiB2b2lkIDAgIT09IG1hc2tzZXQubWFza0xlbmd0aCB8fCAobWFza3NldC5tYXNrTGVuZ3RoID0gcG9zIC0gMSksIFxuICAgICAgICAgICAgICAgIG9wdHMuZ3JlZWR5ID0gZ3JlZWR5LCBtYXNrVGVtcGxhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZXNldE1hc2tTZXQoc29mdCkge1xuICAgICAgICAgICAgICAgIG1hc2tzZXQuYnVmZmVyID0gdm9pZCAwLCAhMCAhPT0gc29mdCAmJiAobWFza3NldC52YWxpZFBvc2l0aW9ucyA9IHt9LCBtYXNrc2V0LnAgPSAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldExhc3RWYWxpZFBvc2l0aW9uKGNsb3Nlc3RUbywgc3RyaWN0LCB2YWxpZFBvc2l0aW9ucykge1xuICAgICAgICAgICAgICAgIHZhciBiZWZvcmUgPSAtMSwgYWZ0ZXIgPSAtMSwgdmFsaWRzID0gdmFsaWRQb3NpdGlvbnMgfHwgbWFza3NldC52YWxpZFBvc2l0aW9ucztcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBwb3NOZHggaW4gdm9pZCAwID09PSBjbG9zZXN0VG8gJiYgKGNsb3Nlc3RUbyA9IC0xKSwgdmFsaWRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwc05keCA9IHBhcnNlSW50KHBvc05keCk7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkc1twc05keF0gJiYgKHN0cmljdCB8fCAhMCAhPT0gdmFsaWRzW3BzTmR4XS5nZW5lcmF0ZWRJbnB1dCkgJiYgKHBzTmR4IDw9IGNsb3Nlc3RUbyAmJiAoYmVmb3JlID0gcHNOZHgpLCBcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdFRvIDw9IHBzTmR4ICYmIChhZnRlciA9IHBzTmR4KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAtMSA9PT0gYmVmb3JlIHx8IGJlZm9yZSA9PSBjbG9zZXN0VG8gPyBhZnRlciA6IC0xID09IGFmdGVyID8gYmVmb3JlIDogY2xvc2VzdFRvIC0gYmVmb3JlIDwgYWZ0ZXIgLSBjbG9zZXN0VG8gPyBiZWZvcmUgOiBhZnRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldERlY2lzaW9uVGFrZXIodHN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlY2lzaW9uVGFrZXIgPSB0c3QubG9jYXRvclt0c3QuYWx0ZXJuYXRpb25dO1xuICAgICAgICAgICAgICAgIHJldHVybiBcInN0cmluZ1wiID09IHR5cGVvZiBkZWNpc2lvblRha2VyICYmIDAgPCBkZWNpc2lvblRha2VyLmxlbmd0aCAmJiAoZGVjaXNpb25UYWtlciA9IGRlY2lzaW9uVGFrZXIuc3BsaXQoXCIsXCIpWzBdKSwgXG4gICAgICAgICAgICAgICAgdm9pZCAwICE9PSBkZWNpc2lvblRha2VyID8gZGVjaXNpb25UYWtlci50b1N0cmluZygpIDogXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldExvY2F0b3IodHN0LCBhbGlnbikge1xuICAgICAgICAgICAgICAgIHZhciBsb2NhdG9yID0gKG51bGwgIT0gdHN0LmFsdGVybmF0aW9uID8gdHN0Lm1sb2NbZ2V0RGVjaXNpb25UYWtlcih0c3QpXSA6IHRzdC5sb2NhdG9yKS5qb2luKFwiXCIpO1xuICAgICAgICAgICAgICAgIGlmIChcIlwiICE9PSBsb2NhdG9yKSBmb3IgKDtsb2NhdG9yLmxlbmd0aCA8IGFsaWduOyApIGxvY2F0b3IgKz0gXCIwXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBkZXRlcm1pbmVUZXN0VGVtcGxhdGUocG9zLCB0ZXN0cykge1xuICAgICAgICAgICAgICAgIHBvcyA9IDAgPCBwb3MgPyBwb3MgLSAxIDogMDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhbHRUZXN0ID0gZ2V0VGVzdChwb3MpLCB0YXJnZXRMb2NhdG9yID0gZ2V0TG9jYXRvcihhbHRUZXN0KSwgdHN0TG9jYXRvciwgY2xvc2VzdCwgYmVzdE1hdGNoLCBuZHggPSAwOyBuZHggPCB0ZXN0cy5sZW5ndGg7IG5keCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0c3QgPSB0ZXN0c1tuZHhdO1xuICAgICAgICAgICAgICAgICAgICB0c3RMb2NhdG9yID0gZ2V0TG9jYXRvcih0c3QsIHRhcmdldExvY2F0b3IubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5hYnModHN0TG9jYXRvciAtIHRhcmdldExvY2F0b3IpO1xuICAgICAgICAgICAgICAgICAgICAodm9pZCAwID09PSBjbG9zZXN0IHx8IFwiXCIgIT09IHRzdExvY2F0b3IgJiYgZGlzdGFuY2UgPCBjbG9zZXN0IHx8IGJlc3RNYXRjaCAmJiAhb3B0cy5ncmVlZHkgJiYgYmVzdE1hdGNoLm1hdGNoLm9wdGlvbmFsaXR5ICYmIFwibWFzdGVyXCIgPT09IGJlc3RNYXRjaC5tYXRjaC5uZXdCbG9ja01hcmtlciAmJiAoIXRzdC5tYXRjaC5vcHRpb25hbGl0eSB8fCAhdHN0Lm1hdGNoLm5ld0Jsb2NrTWFya2VyKSB8fCBiZXN0TWF0Y2ggJiYgYmVzdE1hdGNoLm1hdGNoLm9wdGlvbmFsUXVhbnRpZmllciAmJiAhdHN0Lm1hdGNoLm9wdGlvbmFsUXVhbnRpZmllcikgJiYgKGNsb3Nlc3QgPSBkaXN0YW5jZSwgXG4gICAgICAgICAgICAgICAgICAgIGJlc3RNYXRjaCA9IHRzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBiZXN0TWF0Y2g7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRUZXN0VGVtcGxhdGUocG9zLCBuZHhJbnRsenIsIHRzdFBzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcG9zXSB8fCBkZXRlcm1pbmVUZXN0VGVtcGxhdGUocG9zLCBnZXRUZXN0cyhwb3MsIG5keEludGx6ciA/IG5keEludGx6ci5zbGljZSgpIDogbmR4SW50bHpyLCB0c3RQcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0VGVzdChwb3MsIHRlc3RzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcG9zXSA/IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcG9zXSA6ICh0ZXN0cyB8fCBnZXRUZXN0cyhwb3MpKVswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHBvc2l0aW9uQ2FuTWF0Y2hEZWZpbml0aW9uKHBvcywgdGVzdERlZmluaXRpb24sIG9wdHMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB2YWxpZCA9ICExLCB0ZXN0cyA9IGdldFRlc3RzKHBvcyksIHRuZHggPSAwOyB0bmR4IDwgdGVzdHMubGVuZ3RoOyB0bmR4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlc3RzW3RuZHhdLm1hdGNoICYmICghKHRlc3RzW3RuZHhdLm1hdGNoLm5hdGl2ZURlZiAhPT0gdGVzdERlZmluaXRpb24ubWF0Y2hbb3B0cy5zaGlmdFBvc2l0aW9ucyA/IFwiZGVmXCIgOiBcIm5hdGl2ZURlZlwiXSB8fCBvcHRzLnNoaWZ0UG9zaXRpb25zICYmIHRlc3REZWZpbml0aW9uLm1hdGNoLnN0YXRpYykgfHwgdGVzdHNbdG5keF0ubWF0Y2gubmF0aXZlRGVmID09PSB0ZXN0RGVmaW5pdGlvbi5tYXRjaC5uYXRpdmVEZWYpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9ICEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlc3RzW3RuZHhdLm1hdGNoICYmIHRlc3RzW3RuZHhdLm1hdGNoLmRlZiA9PT0gdGVzdERlZmluaXRpb24ubWF0Y2gubmF0aXZlRGVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAhMSA9PT0gdmFsaWQgJiYgdm9pZCAwICE9PSBtYXNrc2V0LmppdE9mZnNldFtwb3NdICYmICh2YWxpZCA9IHBvc2l0aW9uQ2FuTWF0Y2hEZWZpbml0aW9uKHBvcyArIG1hc2tzZXQuaml0T2Zmc2V0W3Bvc10sIHRlc3REZWZpbml0aW9uLCBvcHRzKSksIFxuICAgICAgICAgICAgICAgIHZhbGlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0VGVzdHMocG9zLCBuZHhJbnRsenIsIHRzdFBzKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hc2tUb2tlbnMgPSBtYXNrc2V0Lm1hc2tUb2tlbiwgdGVzdFBvcyA9IG5keEludGx6ciA/IHRzdFBzIDogMCwgbmR4SW5pdGlhbGl6ZXIgPSBuZHhJbnRsenIgPyBuZHhJbnRsenIuc2xpY2UoKSA6IFsgMCBdLCBtYXRjaGVzID0gW10sIGluc2VydFN0b3AgPSAhMSwgbGF0ZXN0TWF0Y2gsIGNhY2hlRGVwZW5kZW5jeSA9IG5keEludGx6ciA/IG5keEludGx6ci5qb2luKFwiXCIpIDogXCJcIjtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlVGVzdEZyb21Ub2tlbihtYXNrVG9rZW4sIG5keEluaXRpYWxpemVyLCBsb29wTmR4LCBxdWFudGlmaWVyUmVjdXJzZSkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBoYW5kbGVNYXRjaChtYXRjaCwgbG9vcE5keCwgcXVhbnRpZmllclJlY3Vyc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzRmlyc3RNYXRjaChsYXRlc3RNYXRjaCwgdG9rZW5Hcm91cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdE1hdGNoID0gMCA9PT0gJC5pbkFycmF5KGxhdGVzdE1hdGNoLCB0b2tlbkdyb3VwLm1hdGNoZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdE1hdGNoIHx8ICQuZWFjaCh0b2tlbkdyb3VwLm1hdGNoZXMsIGZ1bmN0aW9uKG5keCwgbWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEwID09PSBtYXRjaC5pc1F1YW50aWZpZXIgPyBmaXJzdE1hdGNoID0gaXNGaXJzdE1hdGNoKGxhdGVzdE1hdGNoLCB0b2tlbkdyb3VwLm1hdGNoZXNbbmR4IC0gMV0pIDogT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hdGNoLCBcIm1hdGNoZXNcIikgJiYgKGZpcnN0TWF0Y2ggPSBpc0ZpcnN0TWF0Y2gobGF0ZXN0TWF0Y2gsIG1hdGNoKSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdE1hdGNoKSByZXR1cm4gITE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksIGZpcnN0TWF0Y2g7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlTmR4SW5pdGlhbGl6ZXIocG9zLCBhbHRlcm5hdGVOZHgsIHRhcmdldEFsdGVybmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJlc3RNYXRjaCwgaW5kZXhQb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChtYXNrc2V0LnRlc3RzW3Bvc10gfHwgbWFza3NldC52YWxpZFBvc2l0aW9uc1twb3NdKSAmJiAkLmVhY2gobWFza3NldC50ZXN0c1twb3NdIHx8IFsgbWFza3NldC52YWxpZFBvc2l0aW9uc1twb3NdIF0sIGZ1bmN0aW9uKG5keCwgbG1udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG1udC5tbG9jW2FsdGVybmF0ZU5keF0pIHJldHVybiBiZXN0TWF0Y2ggPSBsbW50LCAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFsdGVybmF0aW9uID0gdm9pZCAwICE9PSB0YXJnZXRBbHRlcm5hdGlvbiA/IHRhcmdldEFsdGVybmF0aW9uIDogbG1udC5hbHRlcm5hdGlvbiwgbmR4UG9zID0gdm9pZCAwICE9PSBsbW50LmxvY2F0b3JbYWx0ZXJuYXRpb25dID8gbG1udC5sb2NhdG9yW2FsdGVybmF0aW9uXS50b1N0cmluZygpLmluZGV4T2YoYWx0ZXJuYXRlTmR4KSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAwID09PSBpbmRleFBvcyB8fCBuZHhQb3MgPCBpbmRleFBvcykgJiYgLTEgIT09IG5keFBvcyAmJiAoYmVzdE1hdGNoID0gbG1udCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4UG9zID0gbmR4UG9zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwgYmVzdE1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiZXN0TWF0Y2hBbHRJbmRleCA9IGJlc3RNYXRjaC5sb2NhdG9yW2Jlc3RNYXRjaC5hbHRlcm5hdGlvbl0sIGxvY2F0b3IgPSBiZXN0TWF0Y2gubWxvY1thbHRlcm5hdGVOZHhdIHx8IGJlc3RNYXRjaC5tbG9jW2Jlc3RNYXRjaEFsdEluZGV4XSB8fCBiZXN0TWF0Y2gubG9jYXRvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3Iuc2xpY2UoKHZvaWQgMCAhPT0gdGFyZ2V0QWx0ZXJuYXRpb24gPyB0YXJnZXRBbHRlcm5hdGlvbiA6IGJlc3RNYXRjaC5hbHRlcm5hdGlvbikgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgMCAhPT0gdGFyZ2V0QWx0ZXJuYXRpb24gPyByZXNvbHZlTmR4SW5pdGlhbGl6ZXIocG9zLCBhbHRlcm5hdGVOZHgpIDogdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNTdWJzZXRPZihzb3VyY2UsIHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGV4cGFuZChwYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGV4cGFuZGVkID0gW10sIHN0YXJ0ID0gLTEsIGVuZCwgaSA9IDAsIGwgPSBwYXR0ZXJuLmxlbmd0aDsgaSA8IGw7IGkrKykgaWYgKFwiLVwiID09PSBwYXR0ZXJuLmNoYXJBdChpKSkgZm9yIChlbmQgPSBwYXR0ZXJuLmNoYXJDb2RlQXQoaSArIDEpOyArK3N0YXJ0IDwgZW5kOyApIGV4cGFuZGVkLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShzdGFydCkpOyBlbHNlIHN0YXJ0ID0gcGF0dGVybi5jaGFyQ29kZUF0KGkpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWQucHVzaChwYXR0ZXJuLmNoYXJBdChpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleHBhbmRlZC5qb2luKFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlLm1hdGNoLmRlZiA9PT0gdGFyZ2V0Lm1hdGNoLm5hdGl2ZURlZiB8fCAhKCEob3B0cy5yZWdleCB8fCBzb3VyY2UubWF0Y2guZm4gaW5zdGFuY2VvZiBSZWdFeHAgJiYgdGFyZ2V0Lm1hdGNoLmZuIGluc3RhbmNlb2YgUmVnRXhwKSB8fCAhMCA9PT0gc291cmNlLm1hdGNoLnN0YXRpYyB8fCAhMCA9PT0gdGFyZ2V0Lm1hdGNoLnN0YXRpYykgJiYgLTEgIT09IGV4cGFuZCh0YXJnZXQubWF0Y2guZm4udG9TdHJpbmcoKS5yZXBsYWNlKC9bW1xcXS9dL2csIFwiXCIpKS5pbmRleE9mKGV4cGFuZChzb3VyY2UubWF0Y2guZm4udG9TdHJpbmcoKS5yZXBsYWNlKC9bW1xcXS9dL2csIFwiXCIpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzdGF0aWNDYW5NYXRjaERlZmluaXRpb24oc291cmNlLCB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gITAgPT09IHNvdXJjZS5tYXRjaC5zdGF0aWMgJiYgITAgIT09IHRhcmdldC5tYXRjaC5zdGF0aWMgJiYgdGFyZ2V0Lm1hdGNoLmZuLnRlc3Qoc291cmNlLm1hdGNoLmRlZiwgbWFza3NldCwgcG9zLCAhMSwgb3B0cywgITEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc2V0TWVyZ2VMb2NhdG9ycyh0YXJnZXRNYXRjaCwgYWx0TWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWx0ZXJuYXRpb25OZHggPSB0YXJnZXRNYXRjaC5hbHRlcm5hdGlvbiwgc2hvdWxkTWVyZ2UgPSB2b2lkIDAgPT09IGFsdE1hdGNoIHx8IGFsdGVybmF0aW9uTmR4ID09PSBhbHRNYXRjaC5hbHRlcm5hdGlvbiAmJiAtMSA9PT0gdGFyZ2V0TWF0Y2gubG9jYXRvclthbHRlcm5hdGlvbk5keF0udG9TdHJpbmcoKS5pbmRleE9mKGFsdE1hdGNoLmxvY2F0b3JbYWx0ZXJuYXRpb25OZHhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZE1lcmdlICYmIGFsdGVybmF0aW9uTmR4ID4gYWx0TWF0Y2guYWx0ZXJuYXRpb24pIGZvciAodmFyIGkgPSBhbHRNYXRjaC5hbHRlcm5hdGlvbjsgaSA8IGFsdGVybmF0aW9uTmR4OyBpKyspIGlmICh0YXJnZXRNYXRjaC5sb2NhdG9yW2ldICE9PSBhbHRNYXRjaC5sb2NhdG9yW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aW9uTmR4ID0gaSwgc2hvdWxkTWVyZ2UgPSAhMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRNZXJnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRNYXRjaC5tbG9jID0gdGFyZ2V0TWF0Y2gubWxvYyB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvY05keCA9IHRhcmdldE1hdGNoLmxvY2F0b3JbYWx0ZXJuYXRpb25OZHhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodm9pZCAwICE9PSBsb2NOZHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcInN0cmluZ1wiID09IHR5cGVvZiBsb2NOZHggJiYgKGxvY05keCA9IGxvY05keC5zcGxpdChcIixcIilbMF0pLCB2b2lkIDAgPT09IHRhcmdldE1hdGNoLm1sb2NbbG9jTmR4XSAmJiAodGFyZ2V0TWF0Y2gubWxvY1tsb2NOZHhdID0gdGFyZ2V0TWF0Y2gubG9jYXRvci5zbGljZSgpKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIDAgIT09IGFsdE1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbmR4IGluIGFsdE1hdGNoLm1sb2MpIFwic3RyaW5nXCIgPT0gdHlwZW9mIG5keCAmJiAobmR4ID0gbmR4LnNwbGl0KFwiLFwiKVswXSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgMCA9PT0gdGFyZ2V0TWF0Y2gubWxvY1tuZHhdICYmICh0YXJnZXRNYXRjaC5tbG9jW25keF0gPSBhbHRNYXRjaC5tbG9jW25keF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE1hdGNoLmxvY2F0b3JbYWx0ZXJuYXRpb25OZHhdID0gT2JqZWN0LmtleXModGFyZ2V0TWF0Y2gubWxvYykuam9pbihcIixcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TWF0Y2guYWx0ZXJuYXRpb24gPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzU2FtZUxldmVsKHRhcmdldE1hdGNoLCBhbHRNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRNYXRjaC5sb2NhdG9yLmxlbmd0aCAhPT0gYWx0TWF0Y2gubG9jYXRvci5sZW5ndGgpIHJldHVybiAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsb2NOZHggPSB0YXJnZXRNYXRjaC5hbHRlcm5hdGlvbiArIDE7IGxvY05keCA8IHRhcmdldE1hdGNoLmxvY2F0b3IubGVuZ3RoOyBsb2NOZHgrKykgaWYgKHRhcmdldE1hdGNoLmxvY2F0b3JbbG9jTmR4XSAhPT0gYWx0TWF0Y2gubG9jYXRvcltsb2NOZHhdKSByZXR1cm4gITE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlc3RQb3MgPiBvcHRzLl9tYXhUZXN0UG9zICYmIHZvaWQgMCAhPT0gcXVhbnRpZmllclJlY3Vyc2UpIHRocm93IFwiSW5wdXRtYXNrOiBUaGVyZSBpcyBwcm9iYWJseSBhbiBlcnJvciBpbiB5b3VyIG1hc2sgZGVmaW5pdGlvbiBvciBpbiB0aGUgY29kZS4gQ3JlYXRlIGFuIGlzc3VlIG9uIGdpdGh1YiB3aXRoIGFuIGV4YW1wbGUgb2YgdGhlIG1hc2sgeW91IGFyZSB1c2luZy4gXCIgKyBtYXNrc2V0Lm1hc2s7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVzdFBvcyA9PT0gcG9zICYmIHZvaWQgMCA9PT0gbWF0Y2gubWF0Y2hlcykgcmV0dXJuIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2g6IG1hdGNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0b3I6IGxvb3BOZHgucmV2ZXJzZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNkOiBjYWNoZURlcGVuZGVuY3ksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWxvYzoge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLCAhMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IG1hdGNoLm1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2guaXNHcm91cCAmJiBxdWFudGlmaWVyUmVjdXJzZSAhPT0gbWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gaGFuZGxlTWF0Y2gobWFza1Rva2VuLm1hdGNoZXNbJC5pbkFycmF5KG1hdGNoLCBtYXNrVG9rZW4ubWF0Y2hlcykgKyAxXSwgbG9vcE5keCwgcXVhbnRpZmllclJlY3Vyc2UpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2gpIHJldHVybiAhMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoLmlzT3B0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wdGlvbmFsVG9rZW4gPSBtYXRjaCwgbXRjaHNOZHggPSBtYXRjaGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gcmVzb2x2ZVRlc3RGcm9tVG9rZW4obWF0Y2gsIG5keEluaXRpYWxpemVyLCBsb29wTmR4LCBxdWFudGlmaWVyUmVjdXJzZSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQuZWFjaChtYXRjaGVzLCBmdW5jdGlvbihuZHgsIG10Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGNoc05keCA8PSBuZHggJiYgKG10Y2gubWF0Y2gub3B0aW9uYWxpdHkgPSAhMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwgbGF0ZXN0TWF0Y2ggPSBtYXRjaGVzW21hdGNoZXMubGVuZ3RoIC0gMV0ubWF0Y2gsIHZvaWQgMCAhPT0gcXVhbnRpZmllclJlY3Vyc2UgfHwgIWlzRmlyc3RNYXRjaChsYXRlc3RNYXRjaCwgb3B0aW9uYWxUb2tlbikpIHJldHVybiAhMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydFN0b3AgPSAhMCwgdGVzdFBvcyA9IHBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2guaXNBbHRlcm5hdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbHRlcm5hdGVUb2tlbiA9IG1hdGNoLCBtYWx0ZXJuYXRlTWF0Y2hlcyA9IFtdLCBtYWx0TWF0Y2hlcywgY3VycmVudE1hdGNoZXMgPSBtYXRjaGVzLnNsaWNlKCksIGxvb3BOZHhDbnQgPSBsb29wTmR4Lmxlbmd0aCwgYWx0SW5kZXggPSAwIDwgbmR4SW5pdGlhbGl6ZXIubGVuZ3RoID8gbmR4SW5pdGlhbGl6ZXIuc2hpZnQoKSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLTEgPT09IGFsdEluZGV4IHx8IFwic3RyaW5nXCIgPT0gdHlwZW9mIGFsdEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudFBvcyA9IHRlc3RQb3MsIG5keEluaXRpYWxpemVyQ2xvbmUgPSBuZHhJbml0aWFsaXplci5zbGljZSgpLCBhbHRJbmRleEFyciA9IFtdLCBhbW5keDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcInN0cmluZ1wiID09IHR5cGVvZiBhbHRJbmRleCkgYWx0SW5kZXhBcnIgPSBhbHRJbmRleC5zcGxpdChcIixcIik7IGVsc2UgZm9yIChhbW5keCA9IDA7IGFtbmR4IDwgYWx0ZXJuYXRlVG9rZW4ubWF0Y2hlcy5sZW5ndGg7IGFtbmR4KyspIGFsdEluZGV4QXJyLnB1c2goYW1uZHgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodm9pZCAwICE9PSBtYXNrc2V0LmV4Y2x1ZGVzW3Bvc10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBhbHRJbmRleEFyckNsb25lID0gYWx0SW5kZXhBcnIuc2xpY2UoKSwgaSA9IDAsIGV4bCA9IG1hc2tzZXQuZXhjbHVkZXNbcG9zXS5sZW5ndGg7IGkgPCBleGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXhjbHVkZVNldCA9IG1hc2tzZXQuZXhjbHVkZXNbcG9zXVtpXS50b1N0cmluZygpLnNwbGl0KFwiOlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcE5keC5sZW5ndGggPT0gZXhjbHVkZVNldFsxXSAmJiBhbHRJbmRleEFyci5zcGxpY2UoYWx0SW5kZXhBcnIuaW5kZXhPZihleGNsdWRlU2V0WzBdKSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgPT09IGFsdEluZGV4QXJyLmxlbmd0aCAmJiAoZGVsZXRlIG1hc2tzZXQuZXhjbHVkZXNbcG9zXSwgYWx0SW5kZXhBcnIgPSBhbHRJbmRleEFyckNsb25lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghMCA9PT0gb3B0cy5rZWVwU3RhdGljIHx8IGlzRmluaXRlKHBhcnNlSW50KG9wdHMua2VlcFN0YXRpYykpICYmIGN1cnJlbnRQb3MgPj0gb3B0cy5rZWVwU3RhdGljKSAmJiAoYWx0SW5kZXhBcnIgPSBhbHRJbmRleEFyci5zbGljZSgwLCAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB1bk1hdGNoZWRBbHRlcm5hdGlvbiA9ICExLCBuZHggPSAwOyBuZHggPCBhbHRJbmRleEFyci5sZW5ndGg7IG5keCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW1uZHggPSBwYXJzZUludChhbHRJbmRleEFycltuZHhdKSwgbWF0Y2hlcyA9IFtdLCBuZHhJbml0aWFsaXplciA9IFwic3RyaW5nXCIgPT0gdHlwZW9mIGFsdEluZGV4ICYmIHJlc29sdmVOZHhJbml0aWFsaXplcih0ZXN0UG9zLCBhbW5keCwgbG9vcE5keENudCkgfHwgbmR4SW5pdGlhbGl6ZXJDbG9uZS5zbGljZSgpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGVUb2tlbi5tYXRjaGVzW2FtbmR4XSAmJiBoYW5kbGVNYXRjaChhbHRlcm5hdGVUb2tlbi5tYXRjaGVzW2FtbmR4XSwgWyBhbW5keCBdLmNvbmNhdChsb29wTmR4KSwgcXVhbnRpZmllclJlY3Vyc2UpID8gbWF0Y2ggPSAhMCA6IDAgPT09IG5keCAmJiAodW5NYXRjaGVkQWx0ZXJuYXRpb24gPSAhMCksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbHRNYXRjaGVzID0gbWF0Y2hlcy5zbGljZSgpLCB0ZXN0UG9zID0gY3VycmVudFBvcywgbWF0Y2hlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG5keDEgPSAwOyBuZHgxIDwgbWFsdE1hdGNoZXMubGVuZ3RoOyBuZHgxKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFsdE1hdGNoID0gbWFsdE1hdGNoZXNbbmR4MV0sIGRyb3BNYXRjaCA9ICExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRNYXRjaC5tYXRjaC5qaXQgPSBhbHRNYXRjaC5tYXRjaC5qaXQgfHwgdW5NYXRjaGVkQWx0ZXJuYXRpb24sIGFsdE1hdGNoLmFsdGVybmF0aW9uID0gYWx0TWF0Y2guYWx0ZXJuYXRpb24gfHwgbG9vcE5keENudCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1lcmdlTG9jYXRvcnMoYWx0TWF0Y2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBuZHgyID0gMDsgbmR4MiA8IG1hbHRlcm5hdGVNYXRjaGVzLmxlbmd0aDsgbmR4MisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWx0TWF0Y2gyID0gbWFsdGVybmF0ZU1hdGNoZXNbbmR4Ml07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXCJzdHJpbmdcIiAhPSB0eXBlb2YgYWx0SW5kZXggfHwgdm9pZCAwICE9PSBhbHRNYXRjaC5hbHRlcm5hdGlvbiAmJiAtMSAhPT0gJC5pbkFycmF5KGFsdE1hdGNoLmxvY2F0b3JbYWx0TWF0Y2guYWx0ZXJuYXRpb25dLnRvU3RyaW5nKCksIGFsdEluZGV4QXJyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbHRNYXRjaC5tYXRjaC5uYXRpdmVEZWYgPT09IGFsdE1hdGNoMi5tYXRjaC5uYXRpdmVEZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvcE1hdGNoID0gITAsIHNldE1lcmdlTG9jYXRvcnMoYWx0TWF0Y2gyLCBhbHRNYXRjaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNTdWJzZXRPZihhbHRNYXRjaCwgYWx0TWF0Y2gyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNZXJnZUxvY2F0b3JzKGFsdE1hdGNoLCBhbHRNYXRjaDIpICYmIChkcm9wTWF0Y2ggPSAhMCwgbWFsdGVybmF0ZU1hdGNoZXMuc3BsaWNlKG1hbHRlcm5hdGVNYXRjaGVzLmluZGV4T2YoYWx0TWF0Y2gyKSwgMCwgYWx0TWF0Y2gpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1N1YnNldE9mKGFsdE1hdGNoMiwgYWx0TWF0Y2gpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1lcmdlTG9jYXRvcnMoYWx0TWF0Y2gyLCBhbHRNYXRjaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGljQ2FuTWF0Y2hEZWZpbml0aW9uKGFsdE1hdGNoLCBhbHRNYXRjaDIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2FtZUxldmVsKGFsdE1hdGNoLCBhbHRNYXRjaDIpIHx8IHZvaWQgMCAhPT0gZWwuaW5wdXRtYXNrLnVzZXJPcHRpb25zLmtlZXBTdGF0aWMgPyBzZXRNZXJnZUxvY2F0b3JzKGFsdE1hdGNoLCBhbHRNYXRjaDIpICYmIChkcm9wTWF0Y2ggPSAhMCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbHRlcm5hdGVNYXRjaGVzLnNwbGljZShtYWx0ZXJuYXRlTWF0Y2hlcy5pbmRleE9mKGFsdE1hdGNoMiksIDAsIGFsdE1hdGNoKSkgOiBvcHRzLmtlZXBTdGF0aWMgPSAhMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BNYXRjaCB8fCBtYWx0ZXJuYXRlTWF0Y2hlcy5wdXNoKGFsdE1hdGNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzID0gY3VycmVudE1hdGNoZXMuY29uY2F0KG1hbHRlcm5hdGVNYXRjaGVzKSwgdGVzdFBvcyA9IHBvcywgaW5zZXJ0U3RvcCA9IDAgPCBtYXRjaGVzLmxlbmd0aCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IDAgPCBtYWx0ZXJuYXRlTWF0Y2hlcy5sZW5ndGgsIG5keEluaXRpYWxpemVyID0gbmR4SW5pdGlhbGl6ZXJDbG9uZS5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgbWF0Y2ggPSBoYW5kbGVNYXRjaChhbHRlcm5hdGVUb2tlbi5tYXRjaGVzW2FsdEluZGV4XSB8fCBtYXNrVG9rZW4ubWF0Y2hlc1thbHRJbmRleF0sIFsgYWx0SW5kZXggXS5jb25jYXQobG9vcE5keCksIHF1YW50aWZpZXJSZWN1cnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKSByZXR1cm4gITA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaC5pc1F1YW50aWZpZXIgJiYgcXVhbnRpZmllclJlY3Vyc2UgIT09IG1hc2tUb2tlbi5tYXRjaGVzWyQuaW5BcnJheShtYXRjaCwgbWFza1Rva2VuLm1hdGNoZXMpIC0gMV0pIGZvciAodmFyIHF0ID0gbWF0Y2gsIHFuZHggPSAwIDwgbmR4SW5pdGlhbGl6ZXIubGVuZ3RoID8gbmR4SW5pdGlhbGl6ZXIuc2hpZnQoKSA6IDA7IHFuZHggPCAoaXNOYU4ocXQucXVhbnRpZmllci5tYXgpID8gcW5keCArIDEgOiBxdC5xdWFudGlmaWVyLm1heCkgJiYgdGVzdFBvcyA8PSBwb3M7IHFuZHgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW5Hcm91cCA9IG1hc2tUb2tlbi5tYXRjaGVzWyQuaW5BcnJheShxdCwgbWFza1Rva2VuLm1hdGNoZXMpIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IGhhbmRsZU1hdGNoKHRva2VuR3JvdXAsIFsgcW5keCBdLmNvbmNhdChsb29wTmR4KSwgdG9rZW5Hcm91cCksIG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGF0ZXN0TWF0Y2ggPSBtYXRjaGVzW21hdGNoZXMubGVuZ3RoIC0gMV0ubWF0Y2gsIGxhdGVzdE1hdGNoLm9wdGlvbmFsUXVhbnRpZmllciA9IHFuZHggPj0gcXQucXVhbnRpZmllci5taW4sIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0ZXN0TWF0Y2guaml0ID0gKHFuZHggfHwgMSkgKiB0b2tlbkdyb3VwLm1hdGNoZXMuaW5kZXhPZihsYXRlc3RNYXRjaCkgPj0gcXQucXVhbnRpZmllci5qaXQsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0ZXN0TWF0Y2gub3B0aW9uYWxRdWFudGlmaWVyICYmIGlzRmlyc3RNYXRjaChsYXRlc3RNYXRjaCwgdG9rZW5Hcm91cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRTdG9wID0gITAsIHRlc3RQb3MgPSBwb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGF0ZXN0TWF0Y2guaml0ICYmIChtYXNrc2V0LmppdE9mZnNldFtwb3NdID0gdG9rZW5Hcm91cC5tYXRjaGVzLmxlbmd0aCAtIHRva2VuR3JvdXAubWF0Y2hlcy5pbmRleE9mKGxhdGVzdE1hdGNoKSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgITA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoID0gcmVzb2x2ZVRlc3RGcm9tVG9rZW4obWF0Y2gsIG5keEluaXRpYWxpemVyLCBsb29wTmR4LCBxdWFudGlmaWVyUmVjdXJzZSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoKSByZXR1cm4gITA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgdGVzdFBvcysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHRuZHggPSAwIDwgbmR4SW5pdGlhbGl6ZXIubGVuZ3RoID8gbmR4SW5pdGlhbGl6ZXIuc2hpZnQoKSA6IDA7IHRuZHggPCBtYXNrVG9rZW4ubWF0Y2hlcy5sZW5ndGg7IHRuZHgrKykgaWYgKCEwICE9PSBtYXNrVG9rZW4ubWF0Y2hlc1t0bmR4XS5pc1F1YW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGhhbmRsZU1hdGNoKG1hc2tUb2tlbi5tYXRjaGVzW3RuZHhdLCBbIHRuZHggXS5jb25jYXQobG9vcE5keCksIHF1YW50aWZpZXJSZWN1cnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCAmJiB0ZXN0UG9zID09PSBwb3MpIHJldHVybiBtYXRjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3MgPCB0ZXN0UG9zKSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBtZXJnZUxvY2F0b3JzKHBvcywgdGVzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0b3IgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQuaXNBcnJheSh0ZXN0cykgfHwgKHRlc3RzID0gWyB0ZXN0cyBdKSwgMCA8IHRlc3RzLmxlbmd0aCAmJiAodm9pZCAwID09PSB0ZXN0c1swXS5hbHRlcm5hdGlvbiB8fCAhMCA9PT0gb3B0cy5rZWVwU3RhdGljID8gKGxvY2F0b3IgPSBkZXRlcm1pbmVUZXN0VGVtcGxhdGUocG9zLCB0ZXN0cy5zbGljZSgpKS5sb2NhdG9yLnNsaWNlKCksIFxuICAgICAgICAgICAgICAgICAgICAwID09PSBsb2NhdG9yLmxlbmd0aCAmJiAobG9jYXRvciA9IHRlc3RzWzBdLmxvY2F0b3Iuc2xpY2UoKSkpIDogJC5lYWNoKHRlc3RzLCBmdW5jdGlvbihuZHgsIHRzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFwiXCIgIT09IHRzdC5kZWYpIGlmICgwID09PSBsb2NhdG9yLmxlbmd0aCkgbG9jYXRvciA9IHRzdC5sb2NhdG9yLnNsaWNlKCk7IGVsc2UgZm9yICh2YXIgaSA9IDA7IGkgPCBsb2NhdG9yLmxlbmd0aDsgaSsrKSB0c3QubG9jYXRvcltpXSAmJiAtMSA9PT0gbG9jYXRvcltpXS50b1N0cmluZygpLmluZGV4T2YodHN0LmxvY2F0b3JbaV0pICYmIChsb2NhdG9yW2ldICs9IFwiLFwiICsgdHN0LmxvY2F0b3JbaV0pO1xuICAgICAgICAgICAgICAgICAgICB9KSksIGxvY2F0b3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgtMSA8IHBvcyAmJiAodm9pZCAwID09PSBtYXhMZW5ndGggfHwgcG9zIDwgbWF4TGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodm9pZCAwID09PSBuZHhJbnRsenIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHByZXZpb3VzUG9zID0gcG9zIC0gMSwgdGVzdDsgdm9pZCAwID09PSAodGVzdCA9IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcHJldmlvdXNQb3NdIHx8IG1hc2tzZXQudGVzdHNbcHJldmlvdXNQb3NdKSAmJiAtMSA8IHByZXZpb3VzUG9zOyApIHByZXZpb3VzUG9zLS07XG4gICAgICAgICAgICAgICAgICAgICAgICB2b2lkIDAgIT09IHRlc3QgJiYgLTEgPCBwcmV2aW91c1BvcyAmJiAobmR4SW5pdGlhbGl6ZXIgPSBtZXJnZUxvY2F0b3JzKHByZXZpb3VzUG9zLCB0ZXN0KSwgXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZURlcGVuZGVuY3kgPSBuZHhJbml0aWFsaXplci5qb2luKFwiXCIpLCB0ZXN0UG9zID0gcHJldmlvdXNQb3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXNrc2V0LnRlc3RzW3Bvc10gJiYgbWFza3NldC50ZXN0c1twb3NdWzBdLmNkID09PSBjYWNoZURlcGVuZGVuY3kpIHJldHVybiBtYXNrc2V0LnRlc3RzW3Bvc107XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG10bmR4ID0gbmR4SW5pdGlhbGl6ZXIuc2hpZnQoKTsgbXRuZHggPCBtYXNrVG9rZW5zLmxlbmd0aDsgbXRuZHgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gcmVzb2x2ZVRlc3RGcm9tVG9rZW4obWFza1Rva2Vuc1ttdG5keF0sIG5keEluaXRpYWxpemVyLCBbIG10bmR4IF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoICYmIHRlc3RQb3MgPT09IHBvcyB8fCBwb3MgPCB0ZXN0UG9zKSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gMCAhPT0gbWF0Y2hlcy5sZW5ndGggJiYgIWluc2VydFN0b3AgfHwgbWF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2g6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljOiAhMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsaXR5OiAhMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2luZzogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGxvY2F0b3I6IFtdLFxuICAgICAgICAgICAgICAgICAgICBtbG9jOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgY2Q6IGNhY2hlRGVwZW5kZW5jeVxuICAgICAgICAgICAgICAgIH0pLCB2b2lkIDAgIT09IG5keEludGx6ciAmJiBtYXNrc2V0LnRlc3RzW3Bvc10gPyAkLmV4dGVuZCghMCwgW10sIG1hdGNoZXMpIDogKG1hc2tzZXQudGVzdHNbcG9zXSA9ICQuZXh0ZW5kKCEwLCBbXSwgbWF0Y2hlcyksIFxuICAgICAgICAgICAgICAgIG1hc2tzZXQudGVzdHNbcG9zXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRCdWZmZXJUZW1wbGF0ZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAwID09PSBtYXNrc2V0Ll9idWZmZXIgJiYgKG1hc2tzZXQuX2J1ZmZlciA9IGdldE1hc2tUZW1wbGF0ZSghMSwgMSksIFxuICAgICAgICAgICAgICAgIHZvaWQgMCA9PT0gbWFza3NldC5idWZmZXIgJiYgKG1hc2tzZXQuYnVmZmVyID0gbWFza3NldC5fYnVmZmVyLnNsaWNlKCkpKSwgbWFza3NldC5fYnVmZmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0QnVmZmVyKG5vQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAwICE9PSBtYXNrc2V0LmJ1ZmZlciAmJiAhMCAhPT0gbm9DYWNoZSB8fCAobWFza3NldC5idWZmZXIgPSBnZXRNYXNrVGVtcGxhdGUoITAsIGdldExhc3RWYWxpZFBvc2l0aW9uKCksICEwKSwgXG4gICAgICAgICAgICAgICAgdm9pZCAwID09PSBtYXNrc2V0Ll9idWZmZXIgJiYgKG1hc2tzZXQuX2J1ZmZlciA9IG1hc2tzZXQuYnVmZmVyLnNsaWNlKCkpKSwgbWFza3NldC5idWZmZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWZyZXNoRnJvbUJ1ZmZlcihzdGFydCwgZW5kLCBidWZmZXIpIHtcbiAgICAgICAgICAgICAgICB2YXIgaSwgcCwgc2tpcE9wdGlvbmFsUGFydENoYXJhY3RlciA9IG9wdHMuc2tpcE9wdGlvbmFsUGFydENoYXJhY3RlciwgYmZmciA9IGlzUlRMID8gYnVmZmVyLnNsaWNlKCkucmV2ZXJzZSgpIDogYnVmZmVyO1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLnNraXBPcHRpb25hbFBhcnRDaGFyYWN0ZXIgPSBcIlwiLCAhMCA9PT0gc3RhcnQpIHJlc2V0TWFza1NldCgpLCBtYXNrc2V0LnRlc3RzID0ge30sIFxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gMCwgZW5kID0gYnVmZmVyLmxlbmd0aCwgcCA9IGRldGVybWluZU5ld0NhcmV0UG9zaXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogMCxcbiAgICAgICAgICAgICAgICAgICAgZW5kOiAwXG4gICAgICAgICAgICAgICAgfSwgITEpLmJlZ2luOyBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgZGVsZXRlIG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbaV07XG4gICAgICAgICAgICAgICAgICAgIHAgPSBzdGFydDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGtleXByZXNzID0gbmV3ICQuRXZlbnQoXCJrZXlwcmVzc1wiKTtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleXByZXNzLndoaWNoID0gYmZmcltpXS50b1N0cmluZygpLmNoYXJDb2RlQXQoMCksIGlnbm9yYWJsZSA9ICExO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsUmVzdWx0ID0gRXZlbnRIYW5kbGVycy5rZXlwcmVzc0V2ZW50LmNhbGwoZWwsIGtleXByZXNzLCAhMCwgITEsICExLCBwKTtcbiAgICAgICAgICAgICAgICAgICAgITEgIT09IHZhbFJlc3VsdCAmJiAocCA9IHZhbFJlc3VsdC5mb3J3YXJkUG9zaXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcHRzLnNraXBPcHRpb25hbFBhcnRDaGFyYWN0ZXIgPSBza2lwT3B0aW9uYWxQYXJ0Q2hhcmFjdGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gY2FzaW5nKGVsZW0sIHRlc3QsIHBvcykge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0cy5jYXNpbmcgfHwgdGVzdC5jYXNpbmcpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJ1cHBlclwiOlxuICAgICAgICAgICAgICAgICAgICBlbGVtID0gZWxlbS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgY2FzZSBcImxvd2VyXCI6XG4gICAgICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBjYXNlIFwidGl0bGVcIjpcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc0JlZm9yZSA9IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcG9zIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGVsZW0gPSAwID09PSBwb3MgfHwgcG9zQmVmb3JlICYmIHBvc0JlZm9yZS5pbnB1dCA9PT0gU3RyaW5nLmZyb21DaGFyQ29kZShrZXlDb2RlLlNQQUNFKSA/IGVsZW0udG9VcHBlckNhc2UoKSA6IGVsZW0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICgkLmlzRnVuY3Rpb24ob3B0cy5jYXNpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2gobWFza3NldC52YWxpZFBvc2l0aW9ucyksIGVsZW0gPSBvcHRzLmNhc2luZy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrQWx0ZXJuYXRpb25NYXRjaChhbHRBcnIxLCBhbHRBcnIyLCBuYSkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGFsdEFyckMgPSBvcHRzLmdyZWVkeSA/IGFsdEFycjIgOiBhbHRBcnIyLnNsaWNlKDAsIDEpLCBpc01hdGNoID0gITEsIG5hQXJyID0gdm9pZCAwICE9PSBuYSA/IG5hLnNwbGl0KFwiLFwiKSA6IFtdLCBuYU5keCwgaSA9IDA7IGkgPCBuYUFyci5sZW5ndGg7IGkrKykgLTEgIT09IChuYU5keCA9IGFsdEFycjEuaW5kZXhPZihuYUFycltpXSkpICYmIGFsdEFycjEuc3BsaWNlKG5hTmR4LCAxKTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhbG5keCA9IDA7IGFsbmR4IDwgYWx0QXJyMS5sZW5ndGg7IGFsbmR4KyspIGlmICgtMSAhPT0gJC5pbkFycmF5KGFsdEFycjFbYWxuZHhdLCBhbHRBcnJDKSkge1xuICAgICAgICAgICAgICAgICAgICBpc01hdGNoID0gITA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaXNNYXRjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGFsdGVybmF0ZShtYXNrUG9zLCBjLCBzdHJpY3QsIGZyb21Jc1ZhbGlkLCByQWx0UG9zLCBzZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsaWRQc0Nsb25lID0gJC5leHRlbmQoITAsIHt9LCBtYXNrc2V0LnZhbGlkUG9zaXRpb25zKSwgdHN0Q2xvbmUgPSAkLmV4dGVuZCghMCwge30sIG1hc2tzZXQudGVzdHMpLCBsYXN0QWx0LCBhbHRlcm5hdGlvbiwgaXNWYWxpZFJzbHQgPSAhMSwgcmV0dXJuUnNsdCA9ICExLCBhbHRQb3MsIHByZXZBbHRQb3MsIGksIHZhbGlkUG9zLCBkZWNpc2lvblBvcywgbEFsdFBvcyA9IHZvaWQgMCAhPT0gckFsdFBvcyA/IHJBbHRQb3MgOiBnZXRMYXN0VmFsaWRQb3NpdGlvbigpLCBuZXh0UG9zLCBpbnB1dCwgYmVnaW4sIGVuZDtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIChiZWdpbiA9IHNlbGVjdGlvbi5iZWdpbiwgZW5kID0gc2VsZWN0aW9uLmVuZCwgc2VsZWN0aW9uLmJlZ2luID4gc2VsZWN0aW9uLmVuZCAmJiAoYmVnaW4gPSBzZWxlY3Rpb24uZW5kLCBcbiAgICAgICAgICAgICAgICBlbmQgPSBzZWxlY3Rpb24uYmVnaW4pKSwgLTEgPT09IGxBbHRQb3MgJiYgdm9pZCAwID09PSByQWx0UG9zKSBsYXN0QWx0ID0gMCwgcHJldkFsdFBvcyA9IGdldFRlc3QobGFzdEFsdCksIFxuICAgICAgICAgICAgICAgIGFsdGVybmF0aW9uID0gcHJldkFsdFBvcy5hbHRlcm5hdGlvbjsgZWxzZSBmb3IgKDswIDw9IGxBbHRQb3M7IGxBbHRQb3MtLSkgaWYgKGFsdFBvcyA9IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbbEFsdFBvc10sIFxuICAgICAgICAgICAgICAgIGFsdFBvcyAmJiB2b2lkIDAgIT09IGFsdFBvcy5hbHRlcm5hdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJldkFsdFBvcyAmJiBwcmV2QWx0UG9zLmxvY2F0b3JbYWx0UG9zLmFsdGVybmF0aW9uXSAhPT0gYWx0UG9zLmxvY2F0b3JbYWx0UG9zLmFsdGVybmF0aW9uXSkgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RBbHQgPSBsQWx0UG9zLCBhbHRlcm5hdGlvbiA9IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbbGFzdEFsdF0uYWx0ZXJuYXRpb24sIHByZXZBbHRQb3MgPSBhbHRQb3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IGFsdGVybmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2lzaW9uUG9zID0gcGFyc2VJbnQobGFzdEFsdCksIG1hc2tzZXQuZXhjbHVkZXNbZGVjaXNpb25Qb3NdID0gbWFza3NldC5leGNsdWRlc1tkZWNpc2lvblBvc10gfHwgW10sIFxuICAgICAgICAgICAgICAgICAgICAhMCAhPT0gbWFza1BvcyAmJiBtYXNrc2V0LmV4Y2x1ZGVzW2RlY2lzaW9uUG9zXS5wdXNoKGdldERlY2lzaW9uVGFrZXIocHJldkFsdFBvcykgKyBcIjpcIiArIHByZXZBbHRQb3MuYWx0ZXJuYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsaWRJbnB1dHMgPSBbXSwgcmVzdWx0UG9zID0gLTE7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IGRlY2lzaW9uUG9zOyBpIDwgZ2V0TGFzdFZhbGlkUG9zaXRpb24odm9pZCAwLCAhMCkgKyAxOyBpKyspIC0xID09PSByZXN1bHRQb3MgJiYgbWFza1BvcyA8PSBpICYmIHZvaWQgMCAhPT0gYyAmJiAodmFsaWRJbnB1dHMucHVzaChjKSwgXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFBvcyA9IHZhbGlkSW5wdXRzLmxlbmd0aCAtIDEpLCB2YWxpZFBvcyA9IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbaV0sIHZhbGlkUG9zICYmICEwICE9PSB2YWxpZFBvcy5nZW5lcmF0ZWRJbnB1dCAmJiAodm9pZCAwID09PSBzZWxlY3Rpb24gfHwgaSA8IGJlZ2luIHx8IGVuZCA8PSBpKSAmJiB2YWxpZElucHV0cy5wdXNoKHZhbGlkUG9zLmlucHV0KSwgXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW2ldO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKC0xID09PSByZXN1bHRQb3MgJiYgdm9pZCAwICE9PSBjICYmICh2YWxpZElucHV0cy5wdXNoKGMpLCByZXN1bHRQb3MgPSB2YWxpZElucHV0cy5sZW5ndGggLSAxKTsgdm9pZCAwICE9PSBtYXNrc2V0LmV4Y2x1ZGVzW2RlY2lzaW9uUG9zXSAmJiBtYXNrc2V0LmV4Y2x1ZGVzW2RlY2lzaW9uUG9zXS5sZW5ndGggPCAxMDsgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG1hc2tzZXQudGVzdHMgPSB7fSwgcmVzZXRNYXNrU2V0KCEwKSwgaXNWYWxpZFJzbHQgPSAhMCwgaSA9IDA7IGkgPCB2YWxpZElucHV0cy5sZW5ndGggJiYgKG5leHRQb3MgPSBpc1ZhbGlkUnNsdC5jYXJldCB8fCBnZXRMYXN0VmFsaWRQb3NpdGlvbih2b2lkIDAsICEwKSArIDEsIFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSB2YWxpZElucHV0c1tpXSwgaXNWYWxpZFJzbHQgPSBpc1ZhbGlkKG5leHRQb3MsIGlucHV0LCAhMSwgZnJvbUlzVmFsaWQsICEwKSk7IGkrKykgaSA9PT0gcmVzdWx0UG9zICYmIChyZXR1cm5Sc2x0ID0gaXNWYWxpZFJzbHQpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gbWFza1BvcyAmJiBpc1ZhbGlkUnNsdCAmJiAocmV0dXJuUnNsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJldFBvczogaVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZFJzbHQpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc2V0TWFza1NldCgpLCBwcmV2QWx0UG9zID0gZ2V0VGVzdChkZWNpc2lvblBvcyksIG1hc2tzZXQudmFsaWRQb3NpdGlvbnMgPSAkLmV4dGVuZCghMCwge30sIHZhbGlkUHNDbG9uZSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFza3NldC50ZXN0cyA9ICQuZXh0ZW5kKCEwLCB7fSwgdHN0Q2xvbmUpLCAhbWFza3NldC5leGNsdWRlc1tkZWNpc2lvblBvc10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5Sc2x0ID0gYWx0ZXJuYXRlKG1hc2tQb3MsIGMsIHN0cmljdCwgZnJvbUlzVmFsaWQsIGRlY2lzaW9uUG9zIC0gMSwgc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNpc2lvblRha2VyID0gZ2V0RGVjaXNpb25UYWtlcihwcmV2QWx0UG9zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtMSAhPT0gbWFza3NldC5leGNsdWRlc1tkZWNpc2lvblBvc10uaW5kZXhPZihkZWNpc2lvblRha2VyICsgXCI6XCIgKyBwcmV2QWx0UG9zLmFsdGVybmF0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblJzbHQgPSBhbHRlcm5hdGUobWFza1BvcywgYywgc3RyaWN0LCBmcm9tSXNWYWxpZCwgZGVjaXNpb25Qb3MgLSAxLCBzZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChtYXNrc2V0LmV4Y2x1ZGVzW2RlY2lzaW9uUG9zXS5wdXNoKGRlY2lzaW9uVGFrZXIgKyBcIjpcIiArIHByZXZBbHRQb3MuYWx0ZXJuYXRpb24pLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBkZWNpc2lvblBvczsgaSA8IGdldExhc3RWYWxpZFBvc2l0aW9uKHZvaWQgMCwgITApICsgMTsgaSsrKSBkZWxldGUgbWFza3NldC52YWxpZFBvc2l0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuUnNsdCAmJiAhMSA9PT0gb3B0cy5rZWVwU3RhdGljIHx8IGRlbGV0ZSBtYXNrc2V0LmV4Y2x1ZGVzW2RlY2lzaW9uUG9zXSwgXG4gICAgICAgICAgICAgICAgcmV0dXJuUnNsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGlzVmFsaWQocG9zLCBjLCBzdHJpY3QsIGZyb21Jc1ZhbGlkLCBmcm9tQWx0ZXJuYXRlLCB2YWxpZGF0ZU9ubHkpIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc1NlbGVjdGlvbihwb3NPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzUlRMID8gMSA8IHBvc09iai5iZWdpbiAtIHBvc09iai5lbmQgfHwgcG9zT2JqLmJlZ2luIC0gcG9zT2JqLmVuZCA9PSAxIDogMSA8IHBvc09iai5lbmQgLSBwb3NPYmouYmVnaW4gfHwgcG9zT2JqLmVuZCAtIHBvc09iai5iZWdpbiA9PSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdHJpY3QgPSAhMCA9PT0gc3RyaWN0O1xuICAgICAgICAgICAgICAgIHZhciBtYXNrUG9zID0gcG9zO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NDb21tYW5kT2JqZWN0KGNvbW1hbmRPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gY29tbWFuZE9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gY29tbWFuZE9iai5yZW1vdmUgJiYgKCQuaXNBcnJheShjb21tYW5kT2JqLnJlbW92ZSkgfHwgKGNvbW1hbmRPYmoucmVtb3ZlID0gWyBjb21tYW5kT2JqLnJlbW92ZSBdKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAkLmVhY2goY29tbWFuZE9iai5yZW1vdmUuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGIucG9zIC0gYS5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSwgZnVuY3Rpb24obmR4LCBsbW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2YWxpZGF0ZU1hc2soe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbjogbG1udCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBsbW50ICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksIGNvbW1hbmRPYmoucmVtb3ZlID0gdm9pZCAwKSwgdm9pZCAwICE9PSBjb21tYW5kT2JqLmluc2VydCAmJiAoJC5pc0FycmF5KGNvbW1hbmRPYmouaW5zZXJ0KSB8fCAoY29tbWFuZE9iai5pbnNlcnQgPSBbIGNvbW1hbmRPYmouaW5zZXJ0IF0pLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChjb21tYW5kT2JqLmluc2VydC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5wb3MgLSBiLnBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLCBmdW5jdGlvbihuZHgsIGxtbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlwiICE9PSBsbW50LmMgJiYgaXNWYWxpZChsbW50LnBvcywgbG1udC5jLCB2b2lkIDAgPT09IGxtbnQuc3RyaWN0IHx8IGxtbnQuc3RyaWN0LCB2b2lkIDAgIT09IGxtbnQuZnJvbUlzVmFsaWQgPyBsbW50LmZyb21Jc1ZhbGlkIDogZnJvbUlzVmFsaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksIGNvbW1hbmRPYmouaW5zZXJ0ID0gdm9pZCAwKSwgY29tbWFuZE9iai5yZWZyZXNoRnJvbUJ1ZmZlciAmJiBjb21tYW5kT2JqLmJ1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWZyZXNoID0gY29tbWFuZE9iai5yZWZyZXNoRnJvbUJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoRnJvbUJ1ZmZlcighMCA9PT0gcmVmcmVzaCA/IHJlZnJlc2ggOiByZWZyZXNoLnN0YXJ0LCByZWZyZXNoLmVuZCwgY29tbWFuZE9iai5idWZmZXIpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kT2JqLnJlZnJlc2hGcm9tQnVmZmVyID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAwICE9PSBjb21tYW5kT2JqLnJld3JpdGVQb3NpdGlvbiAmJiAobWFza1BvcyA9IGNvbW1hbmRPYmoucmV3cml0ZVBvc2l0aW9uLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRPYmogPSAhMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmRPYmo7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pc1ZhbGlkKHBvc2l0aW9uLCBjLCBzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJzbHQgPSAhMTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQuZWFjaChnZXRUZXN0cyhwb3NpdGlvbiksIGZ1bmN0aW9uKG5keCwgdHN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVzdCA9IHRzdC5tYXRjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRCdWZmZXIoITApLCByc2x0ID0gbnVsbCAhPSB0ZXN0LmZuID8gdGVzdC5mbi50ZXN0KGMsIG1hc2tzZXQsIHBvc2l0aW9uLCBzdHJpY3QsIG9wdHMsIGlzU2VsZWN0aW9uKHBvcykpIDogKGMgPT09IHRlc3QuZGVmIHx8IGMgPT09IG9wdHMuc2tpcE9wdGlvbmFsUGFydENoYXJhY3RlcikgJiYgXCJcIiAhPT0gdGVzdC5kZWYgJiYge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IGdldFBsYWNlaG9sZGVyKHBvc2l0aW9uLCB0ZXN0LCAhMCkgfHwgdGVzdC5kZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zOiBwb3NpdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgITEgIT09IHJzbHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IHZvaWQgMCAhPT0gcnNsdC5jID8gcnNsdC5jIDogYywgdmFsaWRhdGVkUG9zID0gcG9zaXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0gPSBlbGVtID09PSBvcHRzLnNraXBPcHRpb25hbFBhcnRDaGFyYWN0ZXIgJiYgITAgPT09IHRlc3Quc3RhdGljID8gZ2V0UGxhY2Vob2xkZXIocG9zaXRpb24sIHRlc3QsICEwKSB8fCB0ZXN0LmRlZiA6IGVsZW0sIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzbHQgPSBwcm9jZXNzQ29tbWFuZE9iamVjdChyc2x0KSwgITAgIT09IHJzbHQgJiYgdm9pZCAwICE9PSByc2x0LnBvcyAmJiByc2x0LnBvcyAhPT0gcG9zaXRpb24gJiYgKHZhbGlkYXRlZFBvcyA9IHJzbHQucG9zKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgITAgIT09IHJzbHQgJiYgdm9pZCAwID09PSByc2x0LnBvcyAmJiB2b2lkIDAgPT09IHJzbHQuYyA/ICExIDogKCExID09PSByZXZhbGlkYXRlTWFzayhwb3MsICQuZXh0ZW5kKHt9LCB0c3QsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGNhc2luZyhlbGVtLCB0ZXN0LCB2YWxpZGF0ZWRQb3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksIGZyb21Jc1ZhbGlkLCB2YWxpZGF0ZWRQb3MpICYmIChyc2x0ID0gITEpLCAhMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLCByc2x0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2b2lkIDAgIT09IHBvcy5iZWdpbiAmJiAobWFza1BvcyA9IGlzUlRMID8gcG9zLmVuZCA6IHBvcy5iZWdpbik7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICEwLCBwb3NpdGlvbnNDbG9uZSA9ICQuZXh0ZW5kKCEwLCB7fSwgbWFza3NldC52YWxpZFBvc2l0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKCExID09PSBvcHRzLmtlZXBTdGF0aWMgJiYgdm9pZCAwICE9PSBtYXNrc2V0LmV4Y2x1ZGVzW21hc2tQb3NdICYmICEwICE9PSBmcm9tQWx0ZXJuYXRlICYmICEwICE9PSBmcm9tSXNWYWxpZCkgZm9yICh2YXIgaSA9IG1hc2tQb3M7IGkgPCAoaXNSVEwgPyBwb3MuYmVnaW4gOiBwb3MuZW5kKTsgaSsrKSB2b2lkIDAgIT09IG1hc2tzZXQuZXhjbHVkZXNbaV0gJiYgKG1hc2tzZXQuZXhjbHVkZXNbaV0gPSB2b2lkIDAsIFxuICAgICAgICAgICAgICAgIGRlbGV0ZSBtYXNrc2V0LnRlc3RzW2ldKTtcbiAgICAgICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKG9wdHMucHJlVmFsaWRhdGlvbikgJiYgITAgIT09IGZyb21Jc1ZhbGlkICYmICEwICE9PSB2YWxpZGF0ZU9ubHkgJiYgKHJlc3VsdCA9IG9wdHMucHJlVmFsaWRhdGlvbi5jYWxsKGVsLCBnZXRCdWZmZXIoKSwgbWFza1BvcywgYywgaXNTZWxlY3Rpb24ocG9zKSwgb3B0cywgbWFza3NldCwgcG9zLCBzdHJpY3QgfHwgZnJvbUFsdGVybmF0ZSksIFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHByb2Nlc3NDb21tYW5kT2JqZWN0KHJlc3VsdCkpLCAhMCA9PT0gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgPT09IG1heExlbmd0aCB8fCBtYXNrUG9zIDwgbWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID0gX2lzVmFsaWQobWFza1BvcywgYywgc3RyaWN0KSwgKCFzdHJpY3QgfHwgITAgPT09IGZyb21Jc1ZhbGlkKSAmJiAhMSA9PT0gcmVzdWx0ICYmICEwICE9PSB2YWxpZGF0ZU9ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudFBvc1ZhbGlkID0gbWFza3NldC52YWxpZFBvc2l0aW9uc1ttYXNrUG9zXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRQb3NWYWxpZCB8fCAhMCAhPT0gY3VycmVudFBvc1ZhbGlkLm1hdGNoLnN0YXRpYyB8fCBjdXJyZW50UG9zVmFsaWQubWF0Y2guZGVmICE9PSBjICYmIGMgIT09IG9wdHMuc2tpcE9wdGlvbmFsUGFydENoYXJhY3Rlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5pbnNlcnRNb2RlIHx8IHZvaWQgMCA9PT0gbWFza3NldC52YWxpZFBvc2l0aW9uc1tzZWVrTmV4dChtYXNrUG9zKV0gfHwgcG9zLmVuZCA+IG1hc2tQb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBza2lwID0gITE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFza3NldC5qaXRPZmZzZXRbbWFza1Bvc10gJiYgdm9pZCAwID09PSBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW3NlZWtOZXh0KG1hc2tQb3MpXSAmJiAocmVzdWx0ID0gaXNWYWxpZChtYXNrUG9zICsgbWFza3NldC5qaXRPZmZzZXRbbWFza1Bvc10sIGMsICEwKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhMSAhPT0gcmVzdWx0ICYmICghMCAhPT0gZnJvbUFsdGVybmF0ZSAmJiAocmVzdWx0LmNhcmV0ID0gbWFza1BvcyksIHNraXAgPSAhMCkpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcy5lbmQgPiBtYXNrUG9zICYmIChtYXNrc2V0LnZhbGlkUG9zaXRpb25zW21hc2tQb3NdID0gdm9pZCAwKSwgIXNraXAgJiYgIWlzTWFzayhtYXNrUG9zLCBvcHRzLmtlZXBTdGF0aWMpKSBmb3IgKHZhciBuUG9zID0gbWFza1BvcyArIDEsIHNuUG9zID0gc2Vla05leHQobWFza1Bvcyk7IG5Qb3MgPD0gc25Qb3M7IG5Qb3MrKykgaWYgKHJlc3VsdCA9IF9pc1ZhbGlkKG5Qb3MsIGMsIHN0cmljdCksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgITEgIT09IHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRyYWNrYmFja1Bvc2l0aW9ucyhtYXNrUG9zLCB2b2lkIDAgIT09IHJlc3VsdC5wb3MgPyByZXN1bHQucG9zIDogblBvcykgfHwgcmVzdWx0LCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrUG9zID0gblBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmV0OiBzZWVrTmV4dChtYXNrUG9zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSByZXN1bHQgPSAhMTtcbiAgICAgICAgICAgICAgICAgICAgITEgIT09IHJlc3VsdCB8fCAhb3B0cy5rZWVwU3RhdGljIHx8ICFpc0NvbXBsZXRlKGdldEJ1ZmZlcigpKSAmJiAwICE9PSBtYXNrUG9zIHx8IHN0cmljdCB8fCAhMCA9PT0gZnJvbUFsdGVybmF0ZSA/IGlzU2VsZWN0aW9uKHBvcykgJiYgbWFza3NldC50ZXN0c1ttYXNrUG9zXSAmJiAxIDwgbWFza3NldC50ZXN0c1ttYXNrUG9zXS5sZW5ndGggJiYgb3B0cy5rZWVwU3RhdGljICYmICFzdHJpY3QgJiYgITAgIT09IGZyb21BbHRlcm5hdGUgJiYgKHJlc3VsdCA9IGFsdGVybmF0ZSghMCkpIDogcmVzdWx0ID0gYWx0ZXJuYXRlKG1hc2tQb3MsIGMsIHN0cmljdCwgZnJvbUlzVmFsaWQsIHZvaWQgMCwgcG9zKSwgXG4gICAgICAgICAgICAgICAgICAgICEwID09PSByZXN1bHQgJiYgKHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvczogbWFza1Bvc1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCQuaXNGdW5jdGlvbihvcHRzLnBvc3RWYWxpZGF0aW9uKSAmJiAhMCAhPT0gZnJvbUlzVmFsaWQgJiYgITAgIT09IHZhbGlkYXRlT25seSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zdFJlc3VsdCA9IG9wdHMucG9zdFZhbGlkYXRpb24uY2FsbChlbCwgZ2V0QnVmZmVyKCEwKSwgdm9pZCAwICE9PSBwb3MuYmVnaW4gPyBpc1JUTCA/IHBvcy5lbmQgOiBwb3MuYmVnaW4gOiBwb3MsIGMsIHJlc3VsdCwgb3B0cywgbWFza3NldCwgc3RyaWN0KTtcbiAgICAgICAgICAgICAgICAgICAgdm9pZCAwICE9PSBwb3N0UmVzdWx0ICYmIChyZXN1bHQgPSAhMCA9PT0gcG9zdFJlc3VsdCA/IHJlc3VsdCA6IHBvc3RSZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgJiYgdm9pZCAwID09PSByZXN1bHQucG9zICYmIChyZXN1bHQucG9zID0gbWFza1BvcyksICExID09PSByZXN1bHQgfHwgITAgPT09IHZhbGlkYXRlT25seSA/IChyZXNldE1hc2tTZXQoITApLCBcbiAgICAgICAgICAgICAgICBtYXNrc2V0LnZhbGlkUG9zaXRpb25zID0gJC5leHRlbmQoITAsIHt9LCBwb3NpdGlvbnNDbG9uZSkpIDogdHJhY2tiYWNrUG9zaXRpb25zKHZvaWQgMCwgbWFza1BvcywgITApO1xuICAgICAgICAgICAgICAgIHZhciBlbmRSZXN1bHQgPSBwcm9jZXNzQ29tbWFuZE9iamVjdChyZXN1bHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlbmRSZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiB0cmFja2JhY2tQb3NpdGlvbnMob3JpZ2luYWxQb3MsIG5ld1BvcywgZmlsbE9ubHkpIHtcbiAgICAgICAgICAgICAgICBpZiAodm9pZCAwID09PSBvcmlnaW5hbFBvcykgZm9yIChvcmlnaW5hbFBvcyA9IG5ld1BvcyAtIDE7IDAgPCBvcmlnaW5hbFBvcyAmJiAhbWFza3NldC52YWxpZFBvc2l0aW9uc1tvcmlnaW5hbFBvc107IG9yaWdpbmFsUG9zLS0pIDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBwcyA9IG9yaWdpbmFsUG9zOyBwcyA8IG5ld1BvczsgcHMrKykgaWYgKHZvaWQgMCA9PT0gbWFza3NldC52YWxpZFBvc2l0aW9uc1twc10gJiYgIWlzTWFzayhwcywgITApKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2cCA9IDAgPT0gcHMgPyBnZXRUZXN0KHBzKSA6IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcHMgLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVzdHMgPSBnZXRUZXN0cyhwcykuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXCIgPT09IHRlc3RzW3Rlc3RzLmxlbmd0aCAtIDFdLm1hdGNoLmRlZiAmJiB0ZXN0cy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiZXN0TWF0Y2ggPSBkZXRlcm1pbmVUZXN0VGVtcGxhdGUocHMsIHRlc3RzKSwgbnA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmVzdE1hdGNoICYmICghMCAhPT0gYmVzdE1hdGNoLm1hdGNoLmppdCB8fCBcIm1hc3RlclwiID09PSBiZXN0TWF0Y2gubWF0Y2gubmV3QmxvY2tNYXJrZXIgJiYgKG5wID0gbWFza3NldC52YWxpZFBvc2l0aW9uc1twcyArIDFdKSAmJiAhMCA9PT0gbnAubWF0Y2gub3B0aW9uYWxRdWFudGlmaWVyKSAmJiAoYmVzdE1hdGNoID0gJC5leHRlbmQoe30sIGJlc3RNYXRjaCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBnZXRQbGFjZWhvbGRlcihwcywgYmVzdE1hdGNoLm1hdGNoLCAhMCkgfHwgYmVzdE1hdGNoLm1hdGNoLmRlZlxuICAgICAgICAgICAgICAgICAgICAgICAgfSksIGJlc3RNYXRjaC5nZW5lcmF0ZWRJbnB1dCA9ICEwLCByZXZhbGlkYXRlTWFzayhwcywgYmVzdE1hdGNoLCAhMCksICEwICE9PSBmaWxsT25seSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3ZwSW5wdXQgPSBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW25ld1Bvc10uaW5wdXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbbmV3UG9zXSA9IHZvaWQgMCwgaXNWYWxpZChuZXdQb3MsIGN2cElucHV0LCAhMCwgITApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gcmV2YWxpZGF0ZU1hc2socG9zLCB2YWxpZFRlc3QsIGZyb21Jc1ZhbGlkLCB2YWxpZGF0ZWRQb3MpIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc0VuY2xvc2VkU3RhdGljKHBvcywgdmFsaWRzLCBzZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc01hdGNoID0gdmFsaWRzW3Bvc107XG4gICAgICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgPT09IHBvc01hdGNoIHx8ICEwICE9PSBwb3NNYXRjaC5tYXRjaC5zdGF0aWMgfHwgITAgPT09IHBvc01hdGNoLm1hdGNoLm9wdGlvbmFsaXR5IHx8IHZvaWQgMCAhPT0gdmFsaWRzWzBdICYmIHZvaWQgMCAhPT0gdmFsaWRzWzBdLmFsdGVybmF0aW9uKSByZXR1cm4gITE7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcmV2TWF0Y2ggPSBzZWxlY3Rpb24uYmVnaW4gPD0gcG9zIC0gMSA/IHZhbGlkc1twb3MgLSAxXSAmJiAhMCA9PT0gdmFsaWRzW3BvcyAtIDFdLm1hdGNoLnN0YXRpYyAmJiB2YWxpZHNbcG9zIC0gMV0gOiB2YWxpZHNbcG9zIC0gMV0sIG5leHRNYXRjaCA9IHNlbGVjdGlvbi5lbmQgPiBwb3MgKyAxID8gdmFsaWRzW3BvcyArIDFdICYmICEwID09PSB2YWxpZHNbcG9zICsgMV0ubWF0Y2guc3RhdGljICYmIHZhbGlkc1twb3MgKyAxXSA6IHZhbGlkc1twb3MgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZNYXRjaCAmJiBuZXh0TWF0Y2g7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwLCBiZWdpbiA9IHZvaWQgMCAhPT0gcG9zLmJlZ2luID8gcG9zLmJlZ2luIDogcG9zLCBlbmQgPSB2b2lkIDAgIT09IHBvcy5lbmQgPyBwb3MuZW5kIDogcG9zO1xuICAgICAgICAgICAgICAgIGlmIChwb3MuYmVnaW4gPiBwb3MuZW5kICYmIChiZWdpbiA9IHBvcy5lbmQsIGVuZCA9IHBvcy5iZWdpbiksIHZhbGlkYXRlZFBvcyA9IHZvaWQgMCAhPT0gdmFsaWRhdGVkUG9zID8gdmFsaWRhdGVkUG9zIDogYmVnaW4sIFxuICAgICAgICAgICAgICAgIGJlZ2luICE9PSBlbmQgfHwgb3B0cy5pbnNlcnRNb2RlICYmIHZvaWQgMCAhPT0gbWFza3NldC52YWxpZFBvc2l0aW9uc1t2YWxpZGF0ZWRQb3NdICYmIHZvaWQgMCA9PT0gZnJvbUlzVmFsaWQgfHwgdm9pZCAwID09PSB2YWxpZFRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uc0Nsb25lID0gJC5leHRlbmQoITAsIHt9LCBtYXNrc2V0LnZhbGlkUG9zaXRpb25zKSwgbHZwID0gZ2V0TGFzdFZhbGlkUG9zaXRpb24odm9pZCAwLCAhMCksIGk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobWFza3NldC5wID0gYmVnaW4sIGkgPSBsdnA7IGJlZ2luIDw9IGk7IGktLSkgZGVsZXRlIG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbaV0sIFxuICAgICAgICAgICAgICAgICAgICB2b2lkIDAgPT09IHZhbGlkVGVzdCAmJiBkZWxldGUgbWFza3NldC50ZXN0c1tpICsgMV07XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWxpZCA9ICEwLCBqID0gdmFsaWRhdGVkUG9zLCBwb3NNYXRjaCA9IGosIHQsIGNhbk1hdGNoO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhbGlkVGVzdCAmJiAobWFza3NldC52YWxpZFBvc2l0aW9uc1t2YWxpZGF0ZWRQb3NdID0gJC5leHRlbmQoITAsIHt9LCB2YWxpZFRlc3QpLCBcbiAgICAgICAgICAgICAgICAgICAgcG9zTWF0Y2grKywgaisrKSwgaSA9IHZhbGlkVGVzdCA/IGVuZCA6IGVuZCAtIDE7IGkgPD0gbHZwOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgIT09ICh0ID0gcG9zaXRpb25zQ2xvbmVbaV0pICYmICEwICE9PSB0LmdlbmVyYXRlZElucHV0ICYmIChlbmQgPD0gaSB8fCBiZWdpbiA8PSBpICYmIElzRW5jbG9zZWRTdGF0aWMoaSwgcG9zaXRpb25zQ2xvbmUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbjogYmVnaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBlbmRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoO1wiXCIgIT09IGdldFRlc3QocG9zTWF0Y2gpLm1hdGNoLmRlZjsgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghMSAhPT0gKGNhbk1hdGNoID0gcG9zaXRpb25DYW5NYXRjaERlZmluaXRpb24ocG9zTWF0Y2gsIHQsIG9wdHMpKSB8fCBcIitcIiA9PT0gdC5tYXRjaC5kZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiK1wiID09PSB0Lm1hdGNoLmRlZiAmJiBnZXRCdWZmZXIoITApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGlzVmFsaWQocG9zTWF0Y2gsIHQuaW5wdXQsIFwiK1wiICE9PSB0Lm1hdGNoLmRlZiwgXCIrXCIgIT09IHQubWF0Y2guZGVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZCA9ICExICE9PSByZXN1bHQsIGogPSAocmVzdWx0LnBvcyB8fCBwb3NNYXRjaCkgKyAxLCAhdmFsaWQgJiYgY2FuTWF0Y2gpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgdmFsaWQgPSAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIDAgPT09IHZhbGlkVGVzdCAmJiB0Lm1hdGNoLnN0YXRpYyAmJiBpID09PSBwb3MuYmVnaW4gJiYgb2Zmc2V0Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkICYmIHBvc01hdGNoID4gbWFza3NldC5tYXNrTGVuZ3RoKSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zTWF0Y2grKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcIiA9PSBnZXRUZXN0KHBvc01hdGNoKS5tYXRjaC5kZWYgJiYgKHZhbGlkID0gITEpLCBwb3NNYXRjaCA9IGo7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkKSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkKSByZXR1cm4gbWFza3NldC52YWxpZFBvc2l0aW9ucyA9ICQuZXh0ZW5kKCEwLCB7fSwgcG9zaXRpb25zQ2xvbmUpLCByZXNldE1hc2tTZXQoITApLCBcbiAgICAgICAgICAgICAgICAgICAgITE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHZhbGlkVGVzdCAmJiBnZXRUZXN0KHZhbGlkYXRlZFBvcykubWF0Y2guY2QgPT09IHZhbGlkVGVzdC5tYXRjaC5jZCAmJiAobWFza3NldC52YWxpZFBvc2l0aW9uc1t2YWxpZGF0ZWRQb3NdID0gJC5leHRlbmQoITAsIHt9LCB2YWxpZFRlc3QpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzZXRNYXNrU2V0KCEwKSwgb2Zmc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXNNYXNrKHBvcywgc3RyaWN0LCBmdXp6eSkge1xuICAgICAgICAgICAgICAgIHZhciB0ZXN0ID0gZ2V0VGVzdFRlbXBsYXRlKHBvcykubWF0Y2g7XG4gICAgICAgICAgICAgICAgaWYgKFwiXCIgPT09IHRlc3QuZGVmICYmICh0ZXN0ID0gZ2V0VGVzdChwb3MpLm1hdGNoKSwgITAgIT09IHRlc3Quc3RhdGljKSByZXR1cm4gdGVzdC5mbjtcbiAgICAgICAgICAgICAgICBpZiAoITAgPT09IGZ1enp5ICYmIHZvaWQgMCAhPT0gbWFza3NldC52YWxpZFBvc2l0aW9uc1twb3NdICYmICEwICE9PSBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW3Bvc10uZ2VuZXJhdGVkSW5wdXQpIHJldHVybiAhMDtcbiAgICAgICAgICAgICAgICBpZiAoITAgIT09IHN0cmljdCAmJiAtMSA8IHBvcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZnV6enkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXN0cyA9IGdldFRlc3RzKHBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVzdHMubGVuZ3RoID4gMSArIChcIlwiID09PSB0ZXN0c1t0ZXN0cy5sZW5ndGggLSAxXS5tYXRjaC5kZWYgPyAxIDogMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIHRlc3RUZW1wbGF0ZSA9IGRldGVybWluZVRlc3RUZW1wbGF0ZShwb3MsIGdldFRlc3RzKHBvcykpLCB0ZXN0UGxhY2VIb2xkZXIgPSBnZXRQbGFjZWhvbGRlcihwb3MsIHRlc3RUZW1wbGF0ZS5tYXRjaCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0VGVtcGxhdGUubWF0Y2guZGVmICE9PSB0ZXN0UGxhY2VIb2xkZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHNlZWtOZXh0KHBvcywgbmV3QmxvY2ssIGZ1enp5KSB7XG4gICAgICAgICAgICAgICAgdm9pZCAwID09PSBmdXp6eSAmJiAoZnV6enkgPSAhMCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgcG9zaXRpb24gPSBwb3MgKyAxOyBcIlwiICE9PSBnZXRUZXN0KHBvc2l0aW9uKS5tYXRjaC5kZWYgJiYgKCEwID09PSBuZXdCbG9jayAmJiAoITAgIT09IGdldFRlc3QocG9zaXRpb24pLm1hdGNoLm5ld0Jsb2NrTWFya2VyIHx8ICFpc01hc2socG9zaXRpb24sIHZvaWQgMCwgITApKSB8fCAhMCAhPT0gbmV3QmxvY2sgJiYgIWlzTWFzayhwb3NpdGlvbiwgdm9pZCAwLCBmdXp6eSkpOyApIHBvc2l0aW9uKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gc2Vla1ByZXZpb3VzKHBvcywgbmV3QmxvY2spIHtcbiAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBwb3MsIHRlc3RzO1xuICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8PSAwKSByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICBmb3IgKDswIDwgLS1wb3NpdGlvbiAmJiAoITAgPT09IG5ld0Jsb2NrICYmICEwICE9PSBnZXRUZXN0KHBvc2l0aW9uKS5tYXRjaC5uZXdCbG9ja01hcmtlciB8fCAhMCAhPT0gbmV3QmxvY2sgJiYgIWlzTWFzayhwb3NpdGlvbiwgdm9pZCAwLCAhMCkgJiYgKHRlc3RzID0gZ2V0VGVzdHMocG9zaXRpb24pLCBcbiAgICAgICAgICAgICAgICB0ZXN0cy5sZW5ndGggPCAyIHx8IDIgPT09IHRlc3RzLmxlbmd0aCAmJiBcIlwiID09PSB0ZXN0c1sxXS5tYXRjaC5kZWYpKTsgKSA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gd3JpdGVCdWZmZXIoaW5wdXQsIGJ1ZmZlciwgY2FyZXRQb3MsIGV2ZW50LCB0cmlnZ2VyRXZlbnRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50ICYmICQuaXNGdW5jdGlvbihvcHRzLm9uQmVmb3JlV3JpdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBvcHRzLm9uQmVmb3JlV3JpdGUuY2FsbChpbnB1dG1hc2ssIGV2ZW50LCBidWZmZXIsIGNhcmV0UG9zLCBvcHRzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZWZyZXNoRnJvbUJ1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWZyZXNoID0gcmVzdWx0LnJlZnJlc2hGcm9tQnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hGcm9tQnVmZmVyKCEwID09PSByZWZyZXNoID8gcmVmcmVzaCA6IHJlZnJlc2guc3RhcnQsIHJlZnJlc2guZW5kLCByZXN1bHQuYnVmZmVyIHx8IGJ1ZmZlciksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGdldEJ1ZmZlcighMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB2b2lkIDAgIT09IGNhcmV0UG9zICYmIChjYXJldFBvcyA9IHZvaWQgMCAhPT0gcmVzdWx0LmNhcmV0ID8gcmVzdWx0LmNhcmV0IDogY2FyZXRQb3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IGlucHV0ICYmIChpbnB1dC5pbnB1dG1hc2suX3ZhbHVlU2V0KGJ1ZmZlci5qb2luKFwiXCIpKSwgdm9pZCAwID09PSBjYXJldFBvcyB8fCB2b2lkIDAgIT09IGV2ZW50ICYmIFwiYmx1clwiID09PSBldmVudC50eXBlIHx8IGNhcmV0KGlucHV0LCBjYXJldFBvcywgdm9pZCAwLCB2b2lkIDAsIHZvaWQgMCAhPT0gZXZlbnQgJiYgXCJrZXlkb3duXCIgPT09IGV2ZW50LnR5cGUgJiYgKGV2ZW50LmtleUNvZGUgPT09IGtleUNvZGUuREVMRVRFIHx8IGV2ZW50LmtleUNvZGUgPT09IGtleUNvZGUuQkFDS1NQQUNFKSksIFxuICAgICAgICAgICAgICAgICEwID09PSB0cmlnZ2VyRXZlbnRzKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJGlucHV0ID0gJChpbnB1dCksIG5wdFZhbCA9IGlucHV0LmlucHV0bWFzay5fdmFsdWVHZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgc2tpcElucHV0RXZlbnQgPSAhMCwgJGlucHV0LnRyaWdnZXIoXCJpbnB1dFwiKSwgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5wdFZhbCA9PT0gZ2V0QnVmZmVyVGVtcGxhdGUoKS5qb2luKFwiXCIpID8gJGlucHV0LnRyaWdnZXIoXCJjbGVhcmVkXCIpIDogITAgPT09IGlzQ29tcGxldGUoYnVmZmVyKSAmJiAkaW5wdXQudHJpZ2dlcihcImNvbXBsZXRlXCIpO1xuICAgICAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRQbGFjZWhvbGRlcihwb3MsIHRlc3QsIHJldHVyblBMKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRlc3QgPSB0ZXN0IHx8IGdldFRlc3QocG9zKS5tYXRjaCwgdm9pZCAwICE9PSB0ZXN0LnBsYWNlaG9sZGVyIHx8ICEwID09PSByZXR1cm5QTCkgcmV0dXJuICQuaXNGdW5jdGlvbih0ZXN0LnBsYWNlaG9sZGVyKSA/IHRlc3QucGxhY2Vob2xkZXIob3B0cykgOiB0ZXN0LnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgIGlmICghMCAhPT0gdGVzdC5zdGF0aWMpIHJldHVybiBvcHRzLnBsYWNlaG9sZGVyLmNoYXJBdChwb3MgJSBvcHRzLnBsYWNlaG9sZGVyLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgaWYgKC0xIDwgcG9zICYmIHZvaWQgMCA9PT0gbWFza3NldC52YWxpZFBvc2l0aW9uc1twb3NdKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZXN0cyA9IGdldFRlc3RzKHBvcyksIHN0YXRpY0FsdGVybmF0aW9ucyA9IFtdLCBwcmV2VGVzdDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlc3RzLmxlbmd0aCA+IDEgKyAoXCJcIiA9PT0gdGVzdHNbdGVzdHMubGVuZ3RoIC0gMV0ubWF0Y2guZGVmID8gMSA6IDApKSBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgaSsrKSBpZiAoXCJcIiAhPT0gdGVzdHNbaV0ubWF0Y2guZGVmICYmICEwICE9PSB0ZXN0c1tpXS5tYXRjaC5vcHRpb25hbGl0eSAmJiAhMCAhPT0gdGVzdHNbaV0ubWF0Y2gub3B0aW9uYWxRdWFudGlmaWVyICYmICghMCA9PT0gdGVzdHNbaV0ubWF0Y2guc3RhdGljIHx8IHZvaWQgMCA9PT0gcHJldlRlc3QgfHwgITEgIT09IHRlc3RzW2ldLm1hdGNoLmZuLnRlc3QocHJldlRlc3QubWF0Y2guZGVmLCBtYXNrc2V0LCBwb3MsICEwLCBvcHRzKSkgJiYgKHN0YXRpY0FsdGVybmF0aW9ucy5wdXNoKHRlc3RzW2ldKSwgXG4gICAgICAgICAgICAgICAgICAgICEwID09PSB0ZXN0c1tpXS5tYXRjaC5zdGF0aWMgJiYgKHByZXZUZXN0ID0gdGVzdHNbaV0pLCAxIDwgc3RhdGljQWx0ZXJuYXRpb25zLmxlbmd0aCAmJiAvWzAtOWEtYkEtWl0vLnRlc3Qoc3RhdGljQWx0ZXJuYXRpb25zWzBdLm1hdGNoLmRlZikpKSByZXR1cm4gb3B0cy5wbGFjZWhvbGRlci5jaGFyQXQocG9zICUgb3B0cy5wbGFjZWhvbGRlci5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGVzdC5kZWY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBIYW5kbGVOYXRpdmVQbGFjZWhvbGRlcihucHQsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGllKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChucHQuaW5wdXRtYXNrLl92YWx1ZUdldCgpICE9PSB2YWx1ZSAmJiAobnB0LnBsYWNlaG9sZGVyICE9PSB2YWx1ZSB8fCBcIlwiID09PSBucHQucGxhY2Vob2xkZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gZ2V0QnVmZmVyKCkuc2xpY2UoKSwgbnB0VmFsdWUgPSBucHQuaW5wdXRtYXNrLl92YWx1ZUdldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5wdFZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsdnAgPSBnZXRMYXN0VmFsaWRQb3NpdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xID09PSBsdnAgJiYgbnB0VmFsdWUgPT09IGdldEJ1ZmZlclRlbXBsYXRlKCkuam9pbihcIlwiKSA/IGJ1ZmZlciA9IFtdIDogLTEgIT09IGx2cCAmJiBjbGVhck9wdGlvbmFsVGFpbChidWZmZXIpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUJ1ZmZlcihucHQsIGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgbnB0LnBsYWNlaG9sZGVyICE9PSB2YWx1ZSAmJiAobnB0LnBsYWNlaG9sZGVyID0gdmFsdWUsIFwiXCIgPT09IG5wdC5wbGFjZWhvbGRlciAmJiBucHQucmVtb3ZlQXR0cmlidXRlKFwicGxhY2Vob2xkZXJcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZGV0ZXJtaW5lTmV3Q2FyZXRQb3NpdGlvbihzZWxlY3RlZENhcmV0LCB0YWJiZWQpIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBkb1JhZGl4Rm9jdXMoY2xpY2tQb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFwiXCIgIT09IG9wdHMucmFkaXhQb2ludCAmJiAwICE9PSBvcHRzLmRpZ2l0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZwcyA9IG1hc2tzZXQudmFsaWRQb3NpdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodm9pZCAwID09PSB2cHNbY2xpY2tQb3NdIHx8IHZwc1tjbGlja1Bvc10uaW5wdXQgPT09IGdldFBsYWNlaG9sZGVyKGNsaWNrUG9zKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGlja1BvcyA8IHNlZWtOZXh0KC0xKSkgcmV0dXJuICEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYWRpeFBvcyA9ICQuaW5BcnJheShvcHRzLnJhZGl4UG9pbnQsIGdldEJ1ZmZlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLTEgIT09IHJhZGl4UG9zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHZwIGluIHZwcykgaWYgKHZwc1t2cF0gJiYgcmFkaXhQb3MgPCB2cCAmJiB2cHNbdnBdLmlucHV0ICE9PSBnZXRQbGFjZWhvbGRlcih2cCkpIHJldHVybiAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0YWJiZWQgJiYgKGlzUlRMID8gc2VsZWN0ZWRDYXJldC5lbmQgPSBzZWxlY3RlZENhcmV0LmJlZ2luIDogc2VsZWN0ZWRDYXJldC5iZWdpbiA9IHNlbGVjdGVkQ2FyZXQuZW5kKSwgXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXJldC5iZWdpbiA9PT0gc2VsZWN0ZWRDYXJldC5lbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcHRzLnBvc2l0aW9uQ2FyZXRPbkNsaWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm5vbmVcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNlbGVjdFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXJldCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbjogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IGdldEJ1ZmZlcigpLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImlnbm9yZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXJldC5lbmQgPSBzZWxlY3RlZENhcmV0LmJlZ2luID0gc2Vla05leHQoZ2V0TGFzdFZhbGlkUG9zaXRpb24oKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJyYWRpeEZvY3VzXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9SYWRpeEZvY3VzKHNlbGVjdGVkQ2FyZXQuYmVnaW4pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhZGl4UG9zID0gZ2V0QnVmZmVyKCkuam9pbihcIlwiKS5pbmRleE9mKG9wdHMucmFkaXhQb2ludCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXJldC5lbmQgPSBzZWxlY3RlZENhcmV0LmJlZ2luID0gb3B0cy5udW1lcmljSW5wdXQgPyBzZWVrTmV4dChyYWRpeFBvcykgOiByYWRpeFBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xpY2tQb3NpdGlvbiA9IHNlbGVjdGVkQ2FyZXQuYmVnaW4sIGx2Y2xpY2tQb3NpdGlvbiA9IGdldExhc3RWYWxpZFBvc2l0aW9uKGNsaWNrUG9zaXRpb24sICEwKSwgbGFzdFBvc2l0aW9uID0gc2Vla05leHQoLTEgIT09IGx2Y2xpY2tQb3NpdGlvbiB8fCBpc01hc2soMCkgPyBsdmNsaWNrUG9zaXRpb24gOiAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGlja1Bvc2l0aW9uIDwgbGFzdFBvc2l0aW9uKSBzZWxlY3RlZENhcmV0LmVuZCA9IHNlbGVjdGVkQ2FyZXQuYmVnaW4gPSBpc01hc2soY2xpY2tQb3NpdGlvbiwgITApIHx8IGlzTWFzayhjbGlja1Bvc2l0aW9uIC0gMSwgITApID8gY2xpY2tQb3NpdGlvbiA6IHNlZWtOZXh0KGNsaWNrUG9zaXRpb24pOyBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbHZwID0gbWFza3NldC52YWxpZFBvc2l0aW9uc1tsdmNsaWNrUG9zaXRpb25dLCB0dCA9IGdldFRlc3RUZW1wbGF0ZShsYXN0UG9zaXRpb24sIGx2cCA/IGx2cC5tYXRjaC5sb2NhdG9yIDogdm9pZCAwLCBsdnApLCBwbGFjZWhvbGRlciA9IGdldFBsYWNlaG9sZGVyKGxhc3RQb3NpdGlvbiwgdHQubWF0Y2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcIlwiICE9PSBwbGFjZWhvbGRlciAmJiBnZXRCdWZmZXIoKVtsYXN0UG9zaXRpb25dICE9PSBwbGFjZWhvbGRlciAmJiAhMCAhPT0gdHQubWF0Y2gub3B0aW9uYWxRdWFudGlmaWVyICYmICEwICE9PSB0dC5tYXRjaC5uZXdCbG9ja01hcmtlciB8fCAhaXNNYXNrKGxhc3RQb3NpdGlvbiwgb3B0cy5rZWVwU3RhdGljKSAmJiB0dC5tYXRjaC5kZWYgPT09IHBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdQb3MgPSBzZWVrTmV4dChsYXN0UG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3UG9zIDw9IGNsaWNrUG9zaXRpb24gfHwgY2xpY2tQb3NpdGlvbiA9PT0gbGFzdFBvc2l0aW9uKSAmJiAobGFzdFBvc2l0aW9uID0gbmV3UG9zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXJldC5lbmQgPSBzZWxlY3RlZENhcmV0LmJlZ2luID0gbGFzdFBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZENhcmV0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBFdmVudFJ1bGVyID0ge1xuICAgICAgICAgICAgICAgIG9uOiBmdW5jdGlvbiBvbihpbnB1dCwgZXZlbnROYW1lLCBldmVudEhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGV2ID0gZnVuY3Rpb24gZXYoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5vcmlnaW5hbEV2ZW50ICYmIChlID0gZS5vcmlnaW5hbEV2ZW50IHx8IGUsIGFyZ3VtZW50c1swXSA9IGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLCBhcmdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCA9PT0gdGhhdC5pbnB1dG1hc2sgJiYgXCJGT1JNXCIgIT09IHRoaXMubm9kZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1PcHRzID0gJC5kYXRhKHRoYXQsIFwiX2lucHV0bWFza19vcHRzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltT3B0cyA/IG5ldyBJbnB1dG1hc2soaW1PcHRzKS5tYXNrKHRoYXQpIDogRXZlbnRSdWxlci5vZmYodGhhdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcInNldHZhbHVlXCIgPT09IGUudHlwZSB8fCBcIkZPUk1cIiA9PT0gdGhpcy5ub2RlTmFtZSB8fCAhKHRoYXQuZGlzYWJsZWQgfHwgdGhhdC5yZWFkT25seSAmJiAhKFwia2V5ZG93blwiID09PSBlLnR5cGUgJiYgZS5jdHJsS2V5ICYmIDY3ID09PSBlLmtleUNvZGUgfHwgITEgPT09IG9wdHMudGFiVGhyb3VnaCAmJiBlLmtleUNvZGUgPT09IGtleUNvZGUuVEFCKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaW5wdXRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghMCA9PT0gc2tpcElucHV0RXZlbnQgfHwgZS5pbnB1dFR5cGUgJiYgXCJpbnNlcnRDb21wb3NpdGlvblRleHRcIiA9PT0gZS5pbnB1dFR5cGUpIHJldHVybiBza2lwSW5wdXRFdmVudCA9ICExLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImtleWRvd25cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBLZXlQcmVzc0V2ZW50ID0gITEsIHNraXBJbnB1dEV2ZW50ID0gITE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJrZXlwcmVzc1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEwID09PSBza2lwS2V5UHJlc3NFdmVudCkgcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBLZXlQcmVzc0V2ZW50ID0gITA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJjbGlja1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJmb2N1c1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25FdmVudCA/ICh2YWxpZGF0aW9uRXZlbnQgPSAhMSwgaW5wdXQuYmx1cigpLCBIYW5kbGVOYXRpdmVQbGFjZWhvbGRlcihpbnB1dCwgKGlzUlRMID8gZ2V0QnVmZmVyVGVtcGxhdGUoKS5zbGljZSgpLnJldmVyc2UoKSA6IGdldEJ1ZmZlclRlbXBsYXRlKCkpLmpvaW4oXCJcIikpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDNlMykpIDogKGFyZ3MgPSBhcmd1bWVudHMsIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQuaW5wdXRtYXNrICYmIGV2ZW50SGFuZGxlci5hcHBseSh0aGF0LCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDApKSwgITE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldHVyblZhbCA9IGV2ZW50SGFuZGxlci5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gITEgPT09IHJldHVyblZhbCAmJiAoZS5wcmV2ZW50RGVmYXVsdCgpLCBlLnN0b3BQcm9wYWdhdGlvbigpKSwgcmV0dXJuVmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGlucHV0LmlucHV0bWFzay5ldmVudHNbZXZlbnROYW1lXSA9IGlucHV0LmlucHV0bWFzay5ldmVudHNbZXZlbnROYW1lXSB8fCBbXSwgaW5wdXQuaW5wdXRtYXNrLmV2ZW50c1tldmVudE5hbWVdLnB1c2goZXYpLCBcbiAgICAgICAgICAgICAgICAgICAgLTEgIT09ICQuaW5BcnJheShldmVudE5hbWUsIFsgXCJzdWJtaXRcIiwgXCJyZXNldFwiIF0pID8gbnVsbCAhPT0gaW5wdXQuZm9ybSAmJiAkKGlucHV0LmZvcm0pLm9uKGV2ZW50TmFtZSwgZXYpIDogJChpbnB1dCkub24oZXZlbnROYW1lLCBldik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvZmY6IGZ1bmN0aW9uIG9mZihpbnB1dCwgZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGV2ZW50cztcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQuaW5wdXRtYXNrICYmIGlucHV0LmlucHV0bWFzay5ldmVudHMgJiYgKGV2ZW50ID8gKGV2ZW50cyA9IFtdLCBldmVudHNbZXZlbnRdID0gaW5wdXQuaW5wdXRtYXNrLmV2ZW50c1tldmVudF0pIDogZXZlbnRzID0gaW5wdXQuaW5wdXRtYXNrLmV2ZW50cywgXG4gICAgICAgICAgICAgICAgICAgICQuZWFjaChldmVudHMsIGZ1bmN0aW9uKGV2ZW50TmFtZSwgZXZBcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzAgPCBldkFyci5sZW5ndGg7ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBldiA9IGV2QXJyLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICE9PSAkLmluQXJyYXkoZXZlbnROYW1lLCBbIFwic3VibWl0XCIsIFwicmVzZXRcIiBdKSA/IG51bGwgIT09IGlucHV0LmZvcm0gJiYgJChpbnB1dC5mb3JtKS5vZmYoZXZlbnROYW1lLCBldikgOiAkKGlucHV0KS5vZmYoZXZlbnROYW1lLCBldik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgaW5wdXQuaW5wdXRtYXNrLmV2ZW50c1tldmVudE5hbWVdO1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgRXZlbnRIYW5kbGVycyA9IHtcbiAgICAgICAgICAgICAgICBrZXlkb3duRXZlbnQ6IGZ1bmN0aW9uIGtleWRvd25FdmVudChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMsICRpbnB1dCA9ICQoaW5wdXQpLCBrID0gZS5rZXlDb2RlLCBwb3MgPSBjYXJldChpbnB1dCksIGtkUmVzdWx0ID0gb3B0cy5vbktleURvd24uY2FsbCh0aGlzLCBlLCBnZXRCdWZmZXIoKSwgcG9zLCBvcHRzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0ga2RSZXN1bHQpIHJldHVybiBrZFJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGsgPT09IGtleUNvZGUuQkFDS1NQQUNFIHx8IGsgPT09IGtleUNvZGUuREVMRVRFIHx8IGlwaG9uZSAmJiBrID09PSBrZXlDb2RlLkJBQ0tTUEFDRV9TQUZBUkkgfHwgZS5jdHJsS2V5ICYmIGsgPT09IGtleUNvZGUuWCAmJiAhKFwib25jdXRcIiBpbiBpbnB1dCkpIGUucHJldmVudERlZmF1bHQoKSwgXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVJlbW92ZShpbnB1dCwgaywgcG9zKSwgd3JpdGVCdWZmZXIoaW5wdXQsIGdldEJ1ZmZlcighMCksIG1hc2tzZXQucCwgZSwgaW5wdXQuaW5wdXRtYXNrLl92YWx1ZUdldCgpICE9PSBnZXRCdWZmZXIoKS5qb2luKFwiXCIpKTsgZWxzZSBpZiAoayA9PT0ga2V5Q29kZS5FTkQgfHwgayA9PT0ga2V5Q29kZS5QQUdFX0RPV04pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXJldFBvcyA9IHNlZWtOZXh0KGdldExhc3RWYWxpZFBvc2l0aW9uKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZXQoaW5wdXQsIGUuc2hpZnRLZXkgPyBwb3MuYmVnaW4gOiBjYXJldFBvcywgY2FyZXRQb3MsICEwKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGsgPT09IGtleUNvZGUuSE9NRSAmJiAhZS5zaGlmdEtleSB8fCBrID09PSBrZXlDb2RlLlBBR0VfVVAgPyAoZS5wcmV2ZW50RGVmYXVsdCgpLCBcbiAgICAgICAgICAgICAgICAgICAgY2FyZXQoaW5wdXQsIDAsIGUuc2hpZnRLZXkgPyBwb3MuYmVnaW4gOiAwLCAhMCkpIDogKG9wdHMudW5kb09uRXNjYXBlICYmIGsgPT09IGtleUNvZGUuRVNDQVBFIHx8IDkwID09PSBrICYmIGUuY3RybEtleSkgJiYgITAgIT09IGUuYWx0S2V5ID8gKGNoZWNrVmFsKGlucHV0LCAhMCwgITEsIHVuZG9WYWx1ZS5zcGxpdChcIlwiKSksIFxuICAgICAgICAgICAgICAgICAgICAkaW5wdXQudHJpZ2dlcihcImNsaWNrXCIpKSA6ICEwID09PSBvcHRzLnRhYlRocm91Z2ggJiYgayA9PT0ga2V5Q29kZS5UQUIgPyAoITAgPT09IGUuc2hpZnRLZXkgPyAoITAgPT09IGdldFRlc3QocG9zLmJlZ2luKS5tYXRjaC5zdGF0aWMgJiYgKHBvcy5iZWdpbiA9IHNlZWtOZXh0KHBvcy5iZWdpbikpLCBcbiAgICAgICAgICAgICAgICAgICAgcG9zLmVuZCA9IHNlZWtQcmV2aW91cyhwb3MuYmVnaW4sICEwKSwgcG9zLmJlZ2luID0gc2Vla1ByZXZpb3VzKHBvcy5lbmQsICEwKSkgOiAocG9zLmJlZ2luID0gc2Vla05leHQocG9zLmJlZ2luLCAhMCksIFxuICAgICAgICAgICAgICAgICAgICBwb3MuZW5kID0gc2Vla05leHQocG9zLmJlZ2luLCAhMCksIHBvcy5lbmQgPCBtYXNrc2V0Lm1hc2tMZW5ndGggJiYgcG9zLmVuZC0tKSwgcG9zLmJlZ2luIDwgbWFza3NldC5tYXNrTGVuZ3RoICYmIChlLnByZXZlbnREZWZhdWx0KCksIFxuICAgICAgICAgICAgICAgICAgICBjYXJldChpbnB1dCwgcG9zLmJlZ2luLCBwb3MuZW5kKSkpIDogZS5zaGlmdEtleSB8fCBvcHRzLmluc2VydE1vZGVWaXN1YWwgJiYgITEgPT09IG9wdHMuaW5zZXJ0TW9kZSAmJiAoayA9PT0ga2V5Q29kZS5SSUdIVCA/IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FyZXRQb3MgPSBjYXJldChpbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJldChpbnB1dCwgY2FyZXRQb3MuYmVnaW4pO1xuICAgICAgICAgICAgICAgICAgICB9LCAwKSA6IGsgPT09IGtleUNvZGUuTEVGVCAmJiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhcmV0UG9zX2JlZ2luID0gdHJhbnNsYXRlUG9zaXRpb24oaW5wdXQuaW5wdXRtYXNrLmNhcmV0UG9zLmJlZ2luKSwgY2FyZXRQb3NfZW5kID0gdHJhbnNsYXRlUG9zaXRpb24oaW5wdXQuaW5wdXRtYXNrLmNhcmV0UG9zLmVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJldChpbnB1dCwgaXNSVEwgPyBjYXJldFBvc19iZWdpbiArIChjYXJldFBvc19iZWdpbiA9PT0gbWFza3NldC5tYXNrTGVuZ3RoID8gMCA6IDEpIDogY2FyZXRQb3NfYmVnaW4gLSAoMCA9PT0gY2FyZXRQb3NfYmVnaW4gPyAwIDogMSkpO1xuICAgICAgICAgICAgICAgICAgICB9LCAwKSk7XG4gICAgICAgICAgICAgICAgICAgIGlnbm9yYWJsZSA9IC0xICE9PSAkLmluQXJyYXkoaywgb3B0cy5pZ25vcmFibGVzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGtleXByZXNzRXZlbnQ6IGZ1bmN0aW9uIGtleXByZXNzRXZlbnQoZSwgY2hlY2t2YWwsIHdyaXRlT3V0LCBzdHJpY3QsIG5keCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLCAkaW5wdXQgPSAkKGlucHV0KSwgayA9IGUud2hpY2ggfHwgZS5jaGFyQ29kZSB8fCBlLmtleUNvZGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKCEwID09PSBjaGVja3ZhbCB8fCBlLmN0cmxLZXkgJiYgZS5hbHRLZXkpICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5IHx8IGlnbm9yYWJsZSkpIHJldHVybiBrID09PSBrZXlDb2RlLkVOVEVSICYmIHVuZG9WYWx1ZSAhPT0gZ2V0QnVmZmVyKCkuam9pbihcIlwiKSAmJiAodW5kb1ZhbHVlID0gZ2V0QnVmZmVyKCkuam9pbihcIlwiKSwgXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQudHJpZ2dlcihcImNoYW5nZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMCkpLCBza2lwSW5wdXRFdmVudCA9ICEwLCAhMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDQ0ICE9PSBrICYmIDQ2ICE9PSBrIHx8IDMgIT09IGUubG9jYXRpb24gfHwgXCJcIiA9PT0gb3B0cy5yYWRpeFBvaW50IHx8IChrID0gb3B0cy5yYWRpeFBvaW50LmNoYXJDb2RlQXQoMCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IGNoZWNrdmFsID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiBuZHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBuZHhcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gOiBjYXJldChpbnB1dCksIGZvcndhcmRQb3NpdGlvbiwgYyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoayk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrc2V0LndyaXRlT3V0QnVmZmVyID0gITA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsUmVzdWx0ID0gaXNWYWxpZChwb3MsIGMsIHN0cmljdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoITEgIT09IHZhbFJlc3VsdCAmJiAocmVzZXRNYXNrU2V0KCEwKSwgZm9yd2FyZFBvc2l0aW9uID0gdm9pZCAwICE9PSB2YWxSZXN1bHQuY2FyZXQgPyB2YWxSZXN1bHQuY2FyZXQgOiBzZWVrTmV4dCh2YWxSZXN1bHQucG9zLmJlZ2luID8gdmFsUmVzdWx0LnBvcy5iZWdpbiA6IHZhbFJlc3VsdC5wb3MpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tzZXQucCA9IGZvcndhcmRQb3NpdGlvbiksIGZvcndhcmRQb3NpdGlvbiA9IG9wdHMubnVtZXJpY0lucHV0ICYmIHZvaWQgMCA9PT0gdmFsUmVzdWx0LmNhcmV0ID8gc2Vla1ByZXZpb3VzKGZvcndhcmRQb3NpdGlvbikgOiBmb3J3YXJkUG9zaXRpb24sIFxuICAgICAgICAgICAgICAgICAgICAgICAgITEgIT09IHdyaXRlT3V0ICYmIChzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMub25LZXlWYWxpZGF0aW9uLmNhbGwoaW5wdXQsIGssIHZhbFJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAwKSwgbWFza3NldC53cml0ZU91dEJ1ZmZlciAmJiAhMSAhPT0gdmFsUmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBnZXRCdWZmZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUJ1ZmZlcihpbnB1dCwgYnVmZmVyLCBmb3J3YXJkUG9zaXRpb24sIGUsICEwICE9PSBjaGVja3ZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCgpLCBjaGVja3ZhbCkgcmV0dXJuICExICE9PSB2YWxSZXN1bHQgJiYgKHZhbFJlc3VsdC5mb3J3YXJkUG9zaXRpb24gPSBmb3J3YXJkUG9zaXRpb24pLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbFJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcGFzdGVFdmVudDogZnVuY3Rpb24gcGFzdGVFdmVudChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMsIGlucHV0VmFsdWUgPSB0aGlzLmlucHV0bWFzay5fdmFsdWVHZXQoITApLCBjYXJldFBvcyA9IGNhcmV0KHRoaXMpLCB0ZW1wVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGlzUlRMICYmICh0ZW1wVmFsdWUgPSBjYXJldFBvcy5lbmQsIGNhcmV0UG9zLmVuZCA9IGNhcmV0UG9zLmJlZ2luLCBjYXJldFBvcy5iZWdpbiA9IHRlbXBWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZUJlZm9yZUNhcmV0ID0gaW5wdXRWYWx1ZS5zdWJzdHIoMCwgY2FyZXRQb3MuYmVnaW4pLCB2YWx1ZUFmdGVyQ2FyZXQgPSBpbnB1dFZhbHVlLnN1YnN0cihjYXJldFBvcy5lbmQsIGlucHV0VmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlQmVmb3JlQ2FyZXQgPT0gKGlzUlRMID8gZ2V0QnVmZmVyVGVtcGxhdGUoKS5zbGljZSgpLnJldmVyc2UoKSA6IGdldEJ1ZmZlclRlbXBsYXRlKCkpLnNsaWNlKDAsIGNhcmV0UG9zLmJlZ2luKS5qb2luKFwiXCIpICYmICh2YWx1ZUJlZm9yZUNhcmV0ID0gXCJcIiksIFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUFmdGVyQ2FyZXQgPT0gKGlzUlRMID8gZ2V0QnVmZmVyVGVtcGxhdGUoKS5zbGljZSgpLnJldmVyc2UoKSA6IGdldEJ1ZmZlclRlbXBsYXRlKCkpLnNsaWNlKGNhcmV0UG9zLmVuZCkuam9pbihcIlwiKSAmJiAodmFsdWVBZnRlckNhcmV0ID0gXCJcIiksIFxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY2xpcGJvYXJkRGF0YSAmJiB3aW5kb3cuY2xpcGJvYXJkRGF0YS5nZXREYXRhKSBpbnB1dFZhbHVlID0gdmFsdWVCZWZvcmVDYXJldCArIHdpbmRvdy5jbGlwYm9hcmREYXRhLmdldERhdGEoXCJUZXh0XCIpICsgdmFsdWVBZnRlckNhcmV0OyBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5jbGlwYm9hcmREYXRhIHx8ICFlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSkgcmV0dXJuICEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IHZhbHVlQmVmb3JlQ2FyZXQgKyBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YShcInRleHQvcGxhaW5cIikgKyB2YWx1ZUFmdGVyQ2FyZXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhc3RlVmFsdWUgPSBpbnB1dFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKG9wdHMub25CZWZvcmVQYXN0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZVZhbHVlID0gb3B0cy5vbkJlZm9yZVBhc3RlLmNhbGwoaW5wdXRtYXNrLCBpbnB1dFZhbHVlLCBvcHRzKSwgITEgPT09IHBhc3RlVmFsdWUpIHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZVZhbHVlID0gcGFzdGVWYWx1ZSB8fCBpbnB1dFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGVja1ZhbCh0aGlzLCAhMSwgITEsIHBhc3RlVmFsdWUudG9TdHJpbmcoKS5zcGxpdChcIlwiKSksIHdyaXRlQnVmZmVyKHRoaXMsIGdldEJ1ZmZlcigpLCBzZWVrTmV4dChnZXRMYXN0VmFsaWRQb3NpdGlvbigpKSwgZSwgdW5kb1ZhbHVlICE9PSBnZXRCdWZmZXIoKS5qb2luKFwiXCIpKSwgXG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGlucHV0RmFsbEJhY2tFdmVudDogZnVuY3Rpb24gaW5wdXRGYWxsQmFja0V2ZW50KGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaWVNb2JpbGVIYW5kbGVyKGlucHV0LCBpbnB1dFZhbHVlLCBjYXJldFBvcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGllbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0Q2hhciA9IGlucHV0VmFsdWUucmVwbGFjZShnZXRCdWZmZXIoKS5qb2luKFwiXCIpLCBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMSA9PT0gaW5wdXRDaGFyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXYgPSBpbnB1dFZhbHVlLnNwbGl0KFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdi5zcGxpY2UoY2FyZXRQb3MuYmVnaW4sIDAsIGlucHV0Q2hhciksIGlucHV0VmFsdWUgPSBpdi5qb2luKFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFuYWx5c2VDaGFuZ2VzKGlucHV0VmFsdWUsIGJ1ZmZlciwgY2FyZXRQb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGZyb250UGFydCA9IGlucHV0VmFsdWUuc3Vic3RyKDAsIGNhcmV0UG9zLmJlZ2luKS5zcGxpdChcIlwiKSwgYmFja1BhcnQgPSBpbnB1dFZhbHVlLnN1YnN0cihjYXJldFBvcy5iZWdpbikuc3BsaXQoXCJcIiksIGZyb250QnVmZmVyUGFydCA9IGJ1ZmZlci5zdWJzdHIoMCwgY2FyZXRQb3MuYmVnaW4pLnNwbGl0KFwiXCIpLCBiYWNrQnVmZmVyUGFydCA9IGJ1ZmZlci5zdWJzdHIoY2FyZXRQb3MuYmVnaW4pLnNwbGl0KFwiXCIpLCBmcGwgPSBmcm9udFBhcnQubGVuZ3RoID49IGZyb250QnVmZmVyUGFydC5sZW5ndGggPyBmcm9udFBhcnQubGVuZ3RoIDogZnJvbnRCdWZmZXJQYXJ0Lmxlbmd0aCwgYnBsID0gYmFja1BhcnQubGVuZ3RoID49IGJhY2tCdWZmZXJQYXJ0Lmxlbmd0aCA/IGJhY2tQYXJ0Lmxlbmd0aCA6IGJhY2tCdWZmZXJQYXJ0Lmxlbmd0aCwgYmwsIGksIGFjdGlvbiA9IFwiXCIsIGRhdGEgPSBbXSwgbWFya2VyID0gXCJ+XCIsIHBsYWNlaG9sZGVyOyBmcm9udFBhcnQubGVuZ3RoIDwgZnBsOyApIGZyb250UGFydC5wdXNoKFwiflwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoO2Zyb250QnVmZmVyUGFydC5sZW5ndGggPCBmcGw7ICkgZnJvbnRCdWZmZXJQYXJ0LnB1c2goXCJ+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7YmFja1BhcnQubGVuZ3RoIDwgYnBsOyApIGJhY2tQYXJ0LnVuc2hpZnQoXCJ+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7YmFja0J1ZmZlclBhcnQubGVuZ3RoIDwgYnBsOyApIGJhY2tCdWZmZXJQYXJ0LnVuc2hpZnQoXCJ+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0J1ZmZlciA9IGZyb250UGFydC5jb25jYXQoYmFja1BhcnQpLCBvbGRCdWZmZXIgPSBmcm9udEJ1ZmZlclBhcnQuY29uY2F0KGJhY2tCdWZmZXJQYXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGJsID0gbmV3QnVmZmVyLmxlbmd0aDsgaSA8IGJsOyBpKyspIHN3aXRjaCAocGxhY2Vob2xkZXIgPSBnZXRQbGFjZWhvbGRlcih0cmFuc2xhdGVQb3NpdGlvbihpKSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJpbnNlcnRUZXh0XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkQnVmZmVyW2kgLSAxXSA9PT0gbmV3QnVmZmVyW2ldICYmIGNhcmV0UG9zLmJlZ2luID09IG5ld0J1ZmZlci5sZW5ndGggLSAxICYmIGRhdGEucHVzaChuZXdCdWZmZXJbaV0pLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gYmw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImluc2VydFJlcGxhY2VtZW50VGV4dFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiflwiID09PSBuZXdCdWZmZXJbaV0gPyBjYXJldFBvcy5lbmQrKyA6IGkgPSBibDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZGVsZXRlQ29udGVudEJhY2t3YXJkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ+XCIgPT09IG5ld0J1ZmZlcltpXSA/IGNhcmV0UG9zLmVuZCsrIDogaSA9IGJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QnVmZmVyW2ldICE9PSBvbGRCdWZmZXJbaV0gJiYgKFwiflwiICE9PSBuZXdCdWZmZXJbaSArIDFdICYmIG5ld0J1ZmZlcltpICsgMV0gIT09IHBsYWNlaG9sZGVyICYmIHZvaWQgMCAhPT0gbmV3QnVmZmVyW2kgKyAxXSB8fCAob2xkQnVmZmVyW2ldICE9PSBwbGFjZWhvbGRlciB8fCBcIn5cIiAhPT0gb2xkQnVmZmVyW2kgKyAxXSkgJiYgXCJ+XCIgIT09IG9sZEJ1ZmZlcltpXSA/IFwiflwiID09PSBvbGRCdWZmZXJbaSArIDFdICYmIG9sZEJ1ZmZlcltpXSA9PT0gbmV3QnVmZmVyW2kgKyAxXSA/IChhY3Rpb24gPSBcImluc2VydFRleHRcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wdXNoKG5ld0J1ZmZlcltpXSksIGNhcmV0UG9zLmJlZ2luLS0sIGNhcmV0UG9zLmVuZC0tKSA6IG5ld0J1ZmZlcltpXSAhPT0gcGxhY2Vob2xkZXIgJiYgXCJ+XCIgIT09IG5ld0J1ZmZlcltpXSAmJiAoXCJ+XCIgPT09IG5ld0J1ZmZlcltpICsgMV0gfHwgb2xkQnVmZmVyW2ldICE9PSBuZXdCdWZmZXJbaV0gJiYgb2xkQnVmZmVyW2kgKyAxXSA9PT0gbmV3QnVmZmVyW2kgKyAxXSkgPyAoYWN0aW9uID0gXCJpbnNlcnRSZXBsYWNlbWVudFRleHRcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wdXNoKG5ld0J1ZmZlcltpXSksIGNhcmV0UG9zLmJlZ2luLS0pIDogXCJ+XCIgPT09IG5ld0J1ZmZlcltpXSA/IChhY3Rpb24gPSBcImRlbGV0ZUNvbnRlbnRCYWNrd2FyZFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaXNNYXNrKHRyYW5zbGF0ZVBvc2l0aW9uKGkpLCAhMCkgJiYgb2xkQnVmZmVyW2ldICE9PSBvcHRzLnJhZGl4UG9pbnQgfHwgY2FyZXRQb3MuZW5kKyspIDogaSA9IGJsIDogKGFjdGlvbiA9IFwiaW5zZXJ0VGV4dFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnB1c2gobmV3QnVmZmVyW2ldKSwgY2FyZXRQb3MuYmVnaW4tLSwgY2FyZXRQb3MuZW5kLS0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJldDogY2FyZXRQb3NcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcywgaW5wdXRWYWx1ZSA9IGlucHV0LmlucHV0bWFzay5fdmFsdWVHZXQoITApLCBidWZmZXIgPSAoaXNSVEwgPyBnZXRCdWZmZXIoKS5zbGljZSgpLnJldmVyc2UoKSA6IGdldEJ1ZmZlcigpKS5qb2luKFwiXCIpLCBjYXJldFBvcyA9IGNhcmV0KGlucHV0LCB2b2lkIDAsIHZvaWQgMCwgITApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyICE9PSBpbnB1dFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlID0gaWVNb2JpbGVIYW5kbGVyKGlucHV0LCBpbnB1dFZhbHVlLCBjYXJldFBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhbmdlcyA9IGFuYWx5c2VDaGFuZ2VzKGlucHV0VmFsdWUsIGJ1ZmZlciwgY2FyZXRQb3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICgoaW5wdXQuaW5wdXRtYXNrLnNoYWRvd1Jvb3QgfHwgZG9jdW1lbnQpLmFjdGl2ZUVsZW1lbnQgIT09IGlucHV0ICYmIGlucHV0LmZvY3VzKCksIFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVCdWZmZXIoaW5wdXQsIGdldEJ1ZmZlcigpKSwgY2FyZXQoaW5wdXQsIGNhcmV0UG9zLmJlZ2luLCBjYXJldFBvcy5lbmQsICEwKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLmFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaW5zZXJ0VGV4dFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5lYWNoKGNoYW5nZXMuZGF0YSwgZnVuY3Rpb24obmR4LCBlbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5cHJlc3MgPSBuZXcgJC5FdmVudChcImtleXByZXNzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlwcmVzcy53aGljaCA9IGVudHJ5LmNoYXJDb2RlQXQoMCksIGlnbm9yYWJsZSA9ICExLCBFdmVudEhhbmRsZXJzLmtleXByZXNzRXZlbnQuY2FsbChpbnB1dCwga2V5cHJlc3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZWwudHJpZ2dlcihcImtleXVwXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJkZWxldGVDb250ZW50QmFja3dhcmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ZG93biA9IG5ldyAkLkV2ZW50KFwia2V5ZG93blwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlkb3duLmtleUNvZGUgPSBrZXlDb2RlLkJBQ0tTUEFDRSwgRXZlbnRIYW5kbGVycy5rZXlkb3duRXZlbnQuY2FsbChpbnB1dCwga2V5ZG93bik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBseUlucHV0VmFsdWUoaW5wdXQsIGlucHV0VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjb21wb3NpdGlvbmVuZEV2ZW50OiBmdW5jdGlvbiBjb21wb3NpdGlvbmVuZEV2ZW50KGUpIHtcbiAgICAgICAgICAgICAgICAgICAgJGVsLnRyaWdnZXIoXCJpbnB1dFwiKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldFZhbHVlRXZlbnQ6IGZ1bmN0aW9uIHNldFZhbHVlRXZlbnQoZSwgYXJndW1lbnRfMSwgYXJndW1lbnRfMikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLCB2YWx1ZSA9IGUgJiYgZS5kZXRhaWwgPyBlLmRldGFpbFswXSA6IGFyZ3VtZW50XzE7XG4gICAgICAgICAgICAgICAgICAgIHZvaWQgMCA9PT0gdmFsdWUgJiYgKHZhbHVlID0gdGhpcy5pbnB1dG1hc2suX3ZhbHVlR2V0KCEwKSksIGFwcGx5SW5wdXRWYWx1ZSh0aGlzLCB2YWx1ZSksIFxuICAgICAgICAgICAgICAgICAgICAoZS5kZXRhaWwgJiYgdm9pZCAwICE9PSBlLmRldGFpbFsxXSB8fCB2b2lkIDAgIT09IGFyZ3VtZW50XzIpICYmIGNhcmV0KHRoaXMsIGUuZGV0YWlsID8gZS5kZXRhaWxbMV0gOiBhcmd1bWVudF8yKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZvY3VzRXZlbnQ6IGZ1bmN0aW9uIGZvY3VzRXZlbnQoZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLCBucHRWYWx1ZSA9IHRoaXMuaW5wdXRtYXNrLl92YWx1ZUdldCgpO1xuICAgICAgICAgICAgICAgICAgICBvcHRzLnNob3dNYXNrT25Gb2N1cyAmJiBucHRWYWx1ZSAhPT0gZ2V0QnVmZmVyKCkuam9pbihcIlwiKSAmJiB3cml0ZUJ1ZmZlcih0aGlzLCBnZXRCdWZmZXIoKSwgc2Vla05leHQoZ2V0TGFzdFZhbGlkUG9zaXRpb24oKSkpLCBcbiAgICAgICAgICAgICAgICAgICAgITAgIT09IG9wdHMucG9zaXRpb25DYXJldE9uVGFiIHx8ICExICE9PSBtb3VzZUVudGVyIHx8IGlzQ29tcGxldGUoZ2V0QnVmZmVyKCkpICYmIC0xICE9PSBnZXRMYXN0VmFsaWRQb3NpdGlvbigpIHx8IEV2ZW50SGFuZGxlcnMuY2xpY2tFdmVudC5hcHBseSh0aGlzLCBbIGUsICEwIF0pLCBcbiAgICAgICAgICAgICAgICAgICAgdW5kb1ZhbHVlID0gZ2V0QnVmZmVyKCkuam9pbihcIlwiKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGludmFsaWRFdmVudDogZnVuY3Rpb24gaW52YWxpZEV2ZW50KGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbkV2ZW50ID0gITA7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtb3VzZWxlYXZlRXZlbnQ6IGZ1bmN0aW9uIG1vdXNlbGVhdmVFdmVudCgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgbW91c2VFbnRlciA9ICExLCBvcHRzLmNsZWFyTWFza09uTG9zdEZvY3VzICYmICh0aGlzLmlucHV0bWFzay5zaGFkb3dSb290IHx8IGRvY3VtZW50KS5hY3RpdmVFbGVtZW50ICE9PSB0aGlzICYmIEhhbmRsZU5hdGl2ZVBsYWNlaG9sZGVyKHRoaXMsIG9yaWdpbmFsUGxhY2Vob2xkZXIpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2xpY2tFdmVudDogZnVuY3Rpb24gY2xpY2tFdmVudChlLCB0YWJiZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLmlucHV0bWFzay5zaGFkb3dSb290IHx8IGRvY3VtZW50KS5hY3RpdmVFbGVtZW50ID09PSB0aGlzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3Q2FyZXRQb3NpdGlvbiA9IGRldGVybWluZU5ld0NhcmV0UG9zaXRpb24oY2FyZXQodGhpcyksIHRhYmJlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2b2lkIDAgIT09IG5ld0NhcmV0UG9zaXRpb24gJiYgY2FyZXQodGhpcywgbmV3Q2FyZXRQb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGN1dEV2ZW50OiBmdW5jdGlvbiBjdXRFdmVudChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMsIHBvcyA9IGNhcmV0KHRoaXMpLCBjbGlwYm9hcmREYXRhID0gd2luZG93LmNsaXBib2FyZERhdGEgfHwgZS5jbGlwYm9hcmREYXRhLCBjbGlwRGF0YSA9IGlzUlRMID8gZ2V0QnVmZmVyKCkuc2xpY2UocG9zLmVuZCwgcG9zLmJlZ2luKSA6IGdldEJ1ZmZlcigpLnNsaWNlKHBvcy5iZWdpbiwgcG9zLmVuZCk7XG4gICAgICAgICAgICAgICAgICAgIGNsaXBib2FyZERhdGEuc2V0RGF0YShcInRleHRcIiwgaXNSVEwgPyBjbGlwRGF0YS5yZXZlcnNlKCkuam9pbihcIlwiKSA6IGNsaXBEYXRhLmpvaW4oXCJcIikpLCBcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQgJiYgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjb3B5XCIpLCBoYW5kbGVSZW1vdmUodGhpcywga2V5Q29kZS5ERUxFVEUsIHBvcyksIFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUJ1ZmZlcih0aGlzLCBnZXRCdWZmZXIoKSwgbWFza3NldC5wLCBlLCB1bmRvVmFsdWUgIT09IGdldEJ1ZmZlcigpLmpvaW4oXCJcIikpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmx1ckV2ZW50OiBmdW5jdGlvbiBibHVyRXZlbnQoZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJGlucHV0ID0gJCh0aGlzKSwgaW5wdXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dG1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZU5hdGl2ZVBsYWNlaG9sZGVyKHRoaXMsIG9yaWdpbmFsUGxhY2Vob2xkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5wdFZhbHVlID0gdGhpcy5pbnB1dG1hc2suX3ZhbHVlR2V0KCksIGJ1ZmZlciA9IGdldEJ1ZmZlcigpLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlwiICE9PSBucHRWYWx1ZSAmJiAob3B0cy5jbGVhck1hc2tPbkxvc3RGb2N1cyAmJiAoLTEgPT09IGdldExhc3RWYWxpZFBvc2l0aW9uKCkgJiYgbnB0VmFsdWUgPT09IGdldEJ1ZmZlclRlbXBsYXRlKCkuam9pbihcIlwiKSA/IGJ1ZmZlciA9IFtdIDogY2xlYXJPcHRpb25hbFRhaWwoYnVmZmVyKSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgITEgPT09IGlzQ29tcGxldGUoYnVmZmVyKSAmJiAoc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQudHJpZ2dlcihcImluY29tcGxldGVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAwKSwgb3B0cy5jbGVhckluY29tcGxldGUgJiYgKHJlc2V0TWFza1NldCgpLCBidWZmZXIgPSBvcHRzLmNsZWFyTWFza09uTG9zdEZvY3VzID8gW10gOiBnZXRCdWZmZXJUZW1wbGF0ZSgpLnNsaWNlKCkpKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUJ1ZmZlcih0aGlzLCBidWZmZXIsIHZvaWQgMCwgZSkpLCB1bmRvVmFsdWUgIT09IGdldEJ1ZmZlcigpLmpvaW4oXCJcIikgJiYgKHVuZG9WYWx1ZSA9IGdldEJ1ZmZlcigpLmpvaW4oXCJcIiksIFxuICAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0LnRyaWdnZXIoXCJjaGFuZ2VcIikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtb3VzZWVudGVyRXZlbnQ6IGZ1bmN0aW9uIG1vdXNlZW50ZXJFdmVudCgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgbW91c2VFbnRlciA9ICEwLCAodGhpcy5pbnB1dG1hc2suc2hhZG93Um9vdCB8fCBkb2N1bWVudCkuYWN0aXZlRWxlbWVudCAhPT0gdGhpcyAmJiAobnVsbCA9PSBvcmlnaW5hbFBsYWNlaG9sZGVyICYmIHRoaXMucGxhY2Vob2xkZXIgIT09IG9yaWdpbmFsUGxhY2Vob2xkZXIgJiYgKG9yaWdpbmFsUGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyKSwgXG4gICAgICAgICAgICAgICAgICAgIG9wdHMuc2hvd01hc2tPbkhvdmVyICYmIEhhbmRsZU5hdGl2ZVBsYWNlaG9sZGVyKHRoaXMsIChpc1JUTCA/IGdldEJ1ZmZlclRlbXBsYXRlKCkuc2xpY2UoKS5yZXZlcnNlKCkgOiBnZXRCdWZmZXJUZW1wbGF0ZSgpKS5qb2luKFwiXCIpKSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzdWJtaXRFdmVudDogZnVuY3Rpb24gc3VibWl0RXZlbnQoKSB7XG4gICAgICAgICAgICAgICAgICAgIHVuZG9WYWx1ZSAhPT0gZ2V0QnVmZmVyKCkuam9pbihcIlwiKSAmJiAkZWwudHJpZ2dlcihcImNoYW5nZVwiKSwgb3B0cy5jbGVhck1hc2tPbkxvc3RGb2N1cyAmJiAtMSA9PT0gZ2V0TGFzdFZhbGlkUG9zaXRpb24oKSAmJiBlbC5pbnB1dG1hc2suX3ZhbHVlR2V0ICYmIGVsLmlucHV0bWFzay5fdmFsdWVHZXQoKSA9PT0gZ2V0QnVmZmVyVGVtcGxhdGUoKS5qb2luKFwiXCIpICYmIGVsLmlucHV0bWFzay5fdmFsdWVTZXQoXCJcIiksIFxuICAgICAgICAgICAgICAgICAgICBvcHRzLmNsZWFySW5jb21wbGV0ZSAmJiAhMSA9PT0gaXNDb21wbGV0ZShnZXRCdWZmZXIoKSkgJiYgZWwuaW5wdXRtYXNrLl92YWx1ZVNldChcIlwiKSwgXG4gICAgICAgICAgICAgICAgICAgIG9wdHMucmVtb3ZlTWFza09uU3VibWl0ICYmIChlbC5pbnB1dG1hc2suX3ZhbHVlU2V0KGVsLmlucHV0bWFzay51bm1hc2tlZHZhbHVlKCksICEwKSwgXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUJ1ZmZlcihlbCwgZ2V0QnVmZmVyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9LCAwKSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZXNldEV2ZW50OiBmdW5jdGlvbiByZXNldEV2ZW50KCkge1xuICAgICAgICAgICAgICAgICAgICBlbC5pbnB1dG1hc2sucmVmcmVzaFZhbHVlID0gITAsIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBseUlucHV0VmFsdWUoZWwsIGVsLmlucHV0bWFzay5fdmFsdWVHZXQoITApKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdmFsdWVCdWZmZXI7XG4gICAgICAgICAgICBmdW5jdGlvbiBjaGVja1ZhbChpbnB1dCwgd3JpdGVPdXQsIHN0cmljdCwgbnB0dmwsIGluaXRpYXRpbmdFdmVudCkge1xuICAgICAgICAgICAgICAgIHZhciBpbnB1dG1hc2sgPSB0aGlzIHx8IGlucHV0LmlucHV0bWFzaywgaW5wdXRWYWx1ZSA9IG5wdHZsLnNsaWNlKCksIGNoYXJDb2RlcyA9IFwiXCIsIGluaXRpYWxOZHggPSAtMSwgcmVzdWx0ID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzVGVtcGxhdGVNYXRjaChuZHgsIGNoYXJDb2Rlcykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB0YXJnZXRUZW1wbGF0ZSA9IGdldE1hc2tUZW1wbGF0ZSghMCwgMCkuc2xpY2UobmR4LCBzZWVrTmV4dChuZHgpKS5qb2luKFwiXCIpLnJlcGxhY2UoLycvZywgXCJcIiksIGNoYXJDb2RlTmR4ID0gdGFyZ2V0VGVtcGxhdGUuaW5kZXhPZihjaGFyQ29kZXMpOyAwIDwgY2hhckNvZGVOZHggJiYgXCIgXCIgPT09IHRhcmdldFRlbXBsYXRlW2NoYXJDb2RlTmR4IC0gMV07ICkgY2hhckNvZGVOZHgtLTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gMCA9PT0gY2hhckNvZGVOZHggJiYgIWlzTWFzayhuZHgpICYmIChnZXRUZXN0KG5keCkubWF0Y2gubmF0aXZlRGVmID09PSBjaGFyQ29kZXMuY2hhckF0KDApIHx8ICEwID09PSBnZXRUZXN0KG5keCkubWF0Y2guc3RhdGljICYmIGdldFRlc3QobmR4KS5tYXRjaC5uYXRpdmVEZWYgPT09IFwiJ1wiICsgY2hhckNvZGVzLmNoYXJBdCgwKSB8fCBcIiBcIiA9PT0gZ2V0VGVzdChuZHgpLm1hdGNoLm5hdGl2ZURlZiAmJiAoZ2V0VGVzdChuZHggKyAxKS5tYXRjaC5uYXRpdmVEZWYgPT09IGNoYXJDb2Rlcy5jaGFyQXQoMCkgfHwgITAgPT09IGdldFRlc3QobmR4ICsgMSkubWF0Y2guc3RhdGljICYmIGdldFRlc3QobmR4ICsgMSkubWF0Y2gubmF0aXZlRGVmID09PSBcIidcIiArIGNoYXJDb2Rlcy5jaGFyQXQoMCkpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRjaCAmJiAwIDwgY2hhckNvZGVOZHggJiYgIWlzTWFzayhuZHgsICExLCAhMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0UG9zID0gc2Vla05leHQobmR4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0bWFzay5jYXJldFBvcy5iZWdpbiA8IG5leHRQb3MgJiYgKGlucHV0bWFzay5jYXJldFBvcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbjogbmV4dFBvc1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXNldE1hc2tTZXQoKSwgbWFza3NldC50ZXN0cyA9IHt9LCBpbml0aWFsTmR4ID0gb3B0cy5yYWRpeFBvaW50ID8gZGV0ZXJtaW5lTmV3Q2FyZXRQb3NpdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAwLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IDBcbiAgICAgICAgICAgICAgICB9KS5iZWdpbiA6IDAsIG1hc2tzZXQucCA9IGluaXRpYWxOZHgsIGlucHV0bWFzay5jYXJldFBvcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46IGluaXRpYWxOZHhcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHZhciBzdGF0aWNNYXRjaGVzID0gW10sIHByZXZDYXJldFBvcyA9IGlucHV0bWFzay5jYXJldFBvcztcbiAgICAgICAgICAgICAgICBpZiAoJC5lYWNoKGlucHV0VmFsdWUsIGZ1bmN0aW9uKG5keCwgY2hhckNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gY2hhckNvZGUpIGlmICh2b2lkIDAgPT09IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbbmR4XSAmJiBpbnB1dFZhbHVlW25keF0gPT09IGdldFBsYWNlaG9sZGVyKG5keCkgJiYgaXNNYXNrKG5keCwgITApICYmICExID09PSBpc1ZhbGlkKG5keCwgaW5wdXRWYWx1ZVtuZHhdLCAhMCwgdm9pZCAwLCB2b2lkIDAsICEwKSkgbWFza3NldC5wKys7IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleXByZXNzID0gbmV3ICQuRXZlbnQoXCJfY2hlY2t2YWxcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlwcmVzcy53aGljaCA9IGNoYXJDb2RlLnRvU3RyaW5nKCkuY2hhckNvZGVBdCgwKSwgY2hhckNvZGVzICs9IGNoYXJDb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGx2cCA9IGdldExhc3RWYWxpZFBvc2l0aW9uKHZvaWQgMCwgITApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNUZW1wbGF0ZU1hdGNoKGluaXRpYWxOZHgsIGNoYXJDb2RlcykgPyByZXN1bHQgPSBFdmVudEhhbmRsZXJzLmtleXByZXNzRXZlbnQuY2FsbChpbnB1dCwga2V5cHJlc3MsICEwLCAhMSwgc3RyaWN0LCBsdnAgKyAxKSA6IChyZXN1bHQgPSBFdmVudEhhbmRsZXJzLmtleXByZXNzRXZlbnQuY2FsbChpbnB1dCwga2V5cHJlc3MsICEwLCAhMSwgc3RyaWN0LCBpbnB1dG1hc2suY2FyZXRQb3MuYmVnaW4pLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCAmJiAoaW5pdGlhbE5keCA9IGlucHV0bWFzay5jYXJldFBvcy5iZWdpbiArIDEsIGNoYXJDb2RlcyA9IFwiXCIpKSwgcmVzdWx0ID8gKHZvaWQgMCAhPT0gcmVzdWx0LnBvcyAmJiBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW3Jlc3VsdC5wb3NdICYmICEwID09PSBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW3Jlc3VsdC5wb3NdLm1hdGNoLnN0YXRpYyAmJiB2b2lkIDAgPT09IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcmVzdWx0LnBvc10uYWx0ZXJuYXRpb24gJiYgKHN0YXRpY01hdGNoZXMucHVzaChyZXN1bHQucG9zKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1JUTCB8fCAocmVzdWx0LmZvcndhcmRQb3NpdGlvbiA9IHJlc3VsdC5wb3MgKyAxKSksIHdyaXRlQnVmZmVyKHZvaWQgMCwgZ2V0QnVmZmVyKCksIHJlc3VsdC5mb3J3YXJkUG9zaXRpb24sIGtleXByZXNzLCAhMSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRtYXNrLmNhcmV0UG9zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiByZXN1bHQuZm9yd2FyZFBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogcmVzdWx0LmZvcndhcmRQb3NpdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcHJldkNhcmV0UG9zID0gaW5wdXRtYXNrLmNhcmV0UG9zKSA6IGlucHV0bWFzay5jYXJldFBvcyA9IHByZXZDYXJldFBvcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLCAwIDwgc3RhdGljTWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNuZHgsIHZhbGlkUG9zLCBuZXh0VmFsaWQgPSBzZWVrTmV4dCgtMSwgdm9pZCAwLCAhMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNDb21wbGV0ZShnZXRCdWZmZXIoKSkgJiYgc3RhdGljTWF0Y2hlcy5sZW5ndGggPD0gbmV4dFZhbGlkIHx8IGlzQ29tcGxldGUoZ2V0QnVmZmVyKCkpICYmIDAgPCBzdGF0aWNNYXRjaGVzLmxlbmd0aCAmJiBzdGF0aWNNYXRjaGVzLmxlbmd0aCAhPT0gbmV4dFZhbGlkICYmIDAgPT09IHN0YXRpY01hdGNoZXNbMF0pIGZvciAodmFyIG5leHRTbmR4ID0gbmV4dFZhbGlkOyB2b2lkIDAgIT09IChzbmR4ID0gc3RhdGljTWF0Y2hlcy5zaGlmdCgpKTsgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5cHJlc3MgPSBuZXcgJC5FdmVudChcIl9jaGVja3ZhbFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZFBvcyA9IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbc25keF0sIHZhbGlkUG9zLmdlbmVyYXRlZElucHV0ID0gITAsIGtleXByZXNzLndoaWNoID0gdmFsaWRQb3MuaW5wdXQuY2hhckNvZGVBdCgwKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBFdmVudEhhbmRsZXJzLmtleXByZXNzRXZlbnQuY2FsbChpbnB1dCwga2V5cHJlc3MsICEwLCAhMSwgc3RyaWN0LCBuZXh0U25keCksIFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICYmIHZvaWQgMCAhPT0gcmVzdWx0LnBvcyAmJiByZXN1bHQucG9zICE9PSBzbmR4ICYmIG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcmVzdWx0LnBvc10gJiYgITAgPT09IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcmVzdWx0LnBvc10ubWF0Y2guc3RhdGljKSBzdGF0aWNNYXRjaGVzLnB1c2gocmVzdWx0LnBvcyk7IGVsc2UgaWYgKCFyZXN1bHQpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFNuZHgrKztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGZvciAoO3NuZHggPSBzdGF0aWNNYXRjaGVzLnBvcCgpOyApIHZhbGlkUG9zID0gbWFza3NldC52YWxpZFBvc2l0aW9uc1tzbmR4XSwgXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkUG9zICYmICh2YWxpZFBvcy5nZW5lcmF0ZWRJbnB1dCA9ICEwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHdyaXRlT3V0KSBmb3IgKHZhciB2bmR4IGluIHdyaXRlQnVmZmVyKGlucHV0LCBnZXRCdWZmZXIoKSwgcmVzdWx0ID8gcmVzdWx0LmZvcndhcmRQb3NpdGlvbiA6IHZvaWQgMCwgaW5pdGlhdGluZ0V2ZW50IHx8IG5ldyAkLkV2ZW50KFwiY2hlY2t2YWxcIiksIGluaXRpYXRpbmdFdmVudCAmJiBcImlucHV0XCIgPT09IGluaXRpYXRpbmdFdmVudC50eXBlKSwgXG4gICAgICAgICAgICAgICAgbWFza3NldC52YWxpZFBvc2l0aW9ucykgITAgIT09IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbdm5keF0ubWF0Y2guZ2VuZXJhdGVkICYmIGRlbGV0ZSBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW3ZuZHhdLmdlbmVyYXRlZElucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gdW5tYXNrZWR2YWx1ZShpbnB1dCkge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodm9pZCAwID09PSBpbnB1dC5pbnB1dG1hc2spIHJldHVybiBpbnB1dC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQuaW5wdXRtYXNrICYmIGlucHV0LmlucHV0bWFzay5yZWZyZXNoVmFsdWUgJiYgYXBwbHlJbnB1dFZhbHVlKGlucHV0LCBpbnB1dC5pbnB1dG1hc2suX3ZhbHVlR2V0KCEwKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciB1bVZhbHVlID0gW10sIHZwcyA9IG1hc2tzZXQudmFsaWRQb3NpdGlvbnM7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgcG5keCBpbiB2cHMpIHZwc1twbmR4XSAmJiB2cHNbcG5keF0ubWF0Y2ggJiYgKDEgIT0gdnBzW3BuZHhdLm1hdGNoLnN0YXRpYyB8fCAhMCAhPT0gdnBzW3BuZHhdLmdlbmVyYXRlZElucHV0KSAmJiB1bVZhbHVlLnB1c2godnBzW3BuZHhdLmlucHV0KTtcbiAgICAgICAgICAgICAgICB2YXIgdW5tYXNrZWRWYWx1ZSA9IDAgPT09IHVtVmFsdWUubGVuZ3RoID8gXCJcIiA6IChpc1JUTCA/IHVtVmFsdWUucmV2ZXJzZSgpIDogdW1WYWx1ZSkuam9pbihcIlwiKTtcbiAgICAgICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKG9wdHMub25Vbk1hc2spKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXJWYWx1ZSA9IChpc1JUTCA/IGdldEJ1ZmZlcigpLnNsaWNlKCkucmV2ZXJzZSgpIDogZ2V0QnVmZmVyKCkpLmpvaW4oXCJcIik7XG4gICAgICAgICAgICAgICAgICAgIHVubWFza2VkVmFsdWUgPSBvcHRzLm9uVW5NYXNrLmNhbGwoaW5wdXRtYXNrLCBidWZmZXJWYWx1ZSwgdW5tYXNrZWRWYWx1ZSwgb3B0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1bm1hc2tlZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gdHJhbnNsYXRlUG9zaXRpb24ocG9zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFpc1JUTCB8fCBcIm51bWJlclwiICE9IHR5cGVvZiBwb3MgfHwgb3B0cy5ncmVlZHkgJiYgXCJcIiA9PT0gb3B0cy5wbGFjZWhvbGRlciB8fCAhZWwgfHwgKHBvcyA9IGVsLmlucHV0bWFzay5fdmFsdWVHZXQoKS5sZW5ndGggLSBwb3MpLCBcbiAgICAgICAgICAgICAgICBwb3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjYXJldChpbnB1dCwgYmVnaW4sIGVuZCwgbm90cmFuc2xhdGUsIGlzRGVsZXRlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJhbmdlO1xuICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgPT09IGJlZ2luKSByZXR1cm4gXCJzZWxlY3Rpb25TdGFydFwiIGluIGlucHV0ICYmIFwic2VsZWN0aW9uRW5kXCIgaW4gaW5wdXQgPyAoYmVnaW4gPSBpbnB1dC5zZWxlY3Rpb25TdGFydCwgXG4gICAgICAgICAgICAgICAgZW5kID0gaW5wdXQuc2VsZWN0aW9uRW5kKSA6IHdpbmRvdy5nZXRTZWxlY3Rpb24gPyAocmFuZ2UgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuZ2V0UmFuZ2VBdCgwKSwgXG4gICAgICAgICAgICAgICAgcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIucGFyZW50Tm9kZSAhPT0gaW5wdXQgJiYgcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIgIT09IGlucHV0IHx8IChiZWdpbiA9IHJhbmdlLnN0YXJ0T2Zmc2V0LCBcbiAgICAgICAgICAgICAgICBlbmQgPSByYW5nZS5lbmRPZmZzZXQpKSA6IGRvY3VtZW50LnNlbGVjdGlvbiAmJiBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UgJiYgKHJhbmdlID0gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCksIFxuICAgICAgICAgICAgICAgIGJlZ2luID0gMCAtIHJhbmdlLmR1cGxpY2F0ZSgpLm1vdmVTdGFydChcImNoYXJhY3RlclwiLCAtaW5wdXQuaW5wdXRtYXNrLl92YWx1ZUdldCgpLmxlbmd0aCksIFxuICAgICAgICAgICAgICAgIGVuZCA9IGJlZ2luICsgcmFuZ2UudGV4dC5sZW5ndGgpLCB7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiBub3RyYW5zbGF0ZSA/IGJlZ2luIDogdHJhbnNsYXRlUG9zaXRpb24oYmVnaW4pLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IG5vdHJhbnNsYXRlID8gZW5kIDogdHJhbnNsYXRlUG9zaXRpb24oZW5kKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKCQuaXNBcnJheShiZWdpbikgJiYgKGVuZCA9IGlzUlRMID8gYmVnaW5bMF0gOiBiZWdpblsxXSwgYmVnaW4gPSBpc1JUTCA/IGJlZ2luWzFdIDogYmVnaW5bMF0pLCBcbiAgICAgICAgICAgICAgICB2b2lkIDAgIT09IGJlZ2luLmJlZ2luICYmIChlbmQgPSBpc1JUTCA/IGJlZ2luLmJlZ2luIDogYmVnaW4uZW5kLCBiZWdpbiA9IGlzUlRMID8gYmVnaW4uZW5kIDogYmVnaW4uYmVnaW4pLCBcbiAgICAgICAgICAgICAgICBcIm51bWJlclwiID09IHR5cGVvZiBiZWdpbikge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbiA9IG5vdHJhbnNsYXRlID8gYmVnaW4gOiB0cmFuc2xhdGVQb3NpdGlvbihiZWdpbiksIGVuZCA9IG5vdHJhbnNsYXRlID8gZW5kIDogdHJhbnNsYXRlUG9zaXRpb24oZW5kKSwgXG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IFwibnVtYmVyXCIgPT0gdHlwZW9mIGVuZCA/IGVuZCA6IGJlZ2luO1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2Nyb2xsQ2FsYyA9IHBhcnNlSW50KCgoaW5wdXQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cpLmdldENvbXB1dGVkU3R5bGUgPyAoaW5wdXQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cpLmdldENvbXB1dGVkU3R5bGUoaW5wdXQsIG51bGwpIDogaW5wdXQuY3VycmVudFN0eWxlKS5mb250U2l6ZSkgKiBlbmQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zY3JvbGxMZWZ0ID0gc2Nyb2xsQ2FsYyA+IGlucHV0LnNjcm9sbFdpZHRoID8gc2Nyb2xsQ2FsYyA6IDAsIGlucHV0LmlucHV0bWFzay5jYXJldFBvcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiBiZWdpbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogZW5kXG4gICAgICAgICAgICAgICAgICAgIH0sIG9wdHMuaW5zZXJ0TW9kZVZpc3VhbCAmJiAhMSA9PT0gb3B0cy5pbnNlcnRNb2RlICYmIGJlZ2luID09PSBlbmQgJiYgKGlzRGVsZXRlIHx8IGVuZCsrKSwgXG4gICAgICAgICAgICAgICAgICAgIGlucHV0ID09PSAoaW5wdXQuaW5wdXRtYXNrLnNoYWRvd1Jvb3QgfHwgZG9jdW1lbnQpLmFjdGl2ZUVsZW1lbnQpIGlmIChcInNldFNlbGVjdGlvblJhbmdlXCIgaW4gaW5wdXQpIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKGJlZ2luLCBlbmQpOyBlbHNlIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLCB2b2lkIDAgPT09IGlucHV0LmZpcnN0Q2hpbGQgfHwgbnVsbCA9PT0gaW5wdXQuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LmFwcGVuZENoaWxkKHRleHROb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlLnNldFN0YXJ0KGlucHV0LmZpcnN0Q2hpbGQsIGJlZ2luIDwgaW5wdXQuaW5wdXRtYXNrLl92YWx1ZUdldCgpLmxlbmd0aCA/IGJlZ2luIDogaW5wdXQuaW5wdXRtYXNrLl92YWx1ZUdldCgpLmxlbmd0aCksIFxuICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kKGlucHV0LmZpcnN0Q2hpbGQsIGVuZCA8IGlucHV0LmlucHV0bWFzay5fdmFsdWVHZXQoKS5sZW5ndGggPyBlbmQgOiBpbnB1dC5pbnB1dG1hc2suX3ZhbHVlR2V0KCkubGVuZ3RoKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZS5jb2xsYXBzZSghMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpLCBzZWwuYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaW5wdXQuY3JlYXRlVGV4dFJhbmdlICYmIChyYW5nZSA9IGlucHV0LmNyZWF0ZVRleHRSYW5nZSgpLCByYW5nZS5jb2xsYXBzZSghMCksIFxuICAgICAgICAgICAgICAgICAgICByYW5nZS5tb3ZlRW5kKFwiY2hhcmFjdGVyXCIsIGVuZCksIHJhbmdlLm1vdmVTdGFydChcImNoYXJhY3RlclwiLCBiZWdpbiksIHJhbmdlLnNlbGVjdCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBkZXRlcm1pbmVMYXN0UmVxdWlyZWRQb3NpdGlvbihyZXR1cm5EZWZpbml0aW9uKSB7XG4gICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGdldE1hc2tUZW1wbGF0ZSghMCwgZ2V0TGFzdFZhbGlkUG9zaXRpb24oKSwgITAsICEwKSwgYmwgPSBidWZmZXIubGVuZ3RoLCBwb3MsIGx2cCA9IGdldExhc3RWYWxpZFBvc2l0aW9uKCksIHBvc2l0aW9ucyA9IHt9LCBsdlRlc3QgPSBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW2x2cF0sIG5keEludGx6ciA9IHZvaWQgMCAhPT0gbHZUZXN0ID8gbHZUZXN0LmxvY2F0b3Iuc2xpY2UoKSA6IHZvaWQgMCwgdGVzdFBvcztcbiAgICAgICAgICAgICAgICBmb3IgKHBvcyA9IGx2cCArIDE7IHBvcyA8IGJ1ZmZlci5sZW5ndGg7IHBvcysrKSB0ZXN0UG9zID0gZ2V0VGVzdFRlbXBsYXRlKHBvcywgbmR4SW50bHpyLCBwb3MgLSAxKSwgXG4gICAgICAgICAgICAgICAgbmR4SW50bHpyID0gdGVzdFBvcy5sb2NhdG9yLnNsaWNlKCksIHBvc2l0aW9uc1twb3NdID0gJC5leHRlbmQoITAsIHt9LCB0ZXN0UG9zKTtcbiAgICAgICAgICAgICAgICB2YXIgbHZUZXN0QWx0ID0gbHZUZXN0ICYmIHZvaWQgMCAhPT0gbHZUZXN0LmFsdGVybmF0aW9uID8gbHZUZXN0LmxvY2F0b3JbbHZUZXN0LmFsdGVybmF0aW9uXSA6IHZvaWQgMDtcbiAgICAgICAgICAgICAgICBmb3IgKHBvcyA9IGJsIC0gMTsgbHZwIDwgcG9zICYmICh0ZXN0UG9zID0gcG9zaXRpb25zW3Bvc10sICh0ZXN0UG9zLm1hdGNoLm9wdGlvbmFsaXR5IHx8IHRlc3RQb3MubWF0Y2gub3B0aW9uYWxRdWFudGlmaWVyICYmIHRlc3RQb3MubWF0Y2gubmV3QmxvY2tNYXJrZXIgfHwgbHZUZXN0QWx0ICYmIChsdlRlc3RBbHQgIT09IHBvc2l0aW9uc1twb3NdLmxvY2F0b3JbbHZUZXN0LmFsdGVybmF0aW9uXSAmJiAxICE9IHRlc3RQb3MubWF0Y2guc3RhdGljIHx8ICEwID09PSB0ZXN0UG9zLm1hdGNoLnN0YXRpYyAmJiB0ZXN0UG9zLmxvY2F0b3JbbHZUZXN0LmFsdGVybmF0aW9uXSAmJiBjaGVja0FsdGVybmF0aW9uTWF0Y2godGVzdFBvcy5sb2NhdG9yW2x2VGVzdC5hbHRlcm5hdGlvbl0udG9TdHJpbmcoKS5zcGxpdChcIixcIiksIGx2VGVzdEFsdC50b1N0cmluZygpLnNwbGl0KFwiLFwiKSkgJiYgXCJcIiAhPT0gZ2V0VGVzdHMocG9zKVswXS5kZWYpKSAmJiBidWZmZXJbcG9zXSA9PT0gZ2V0UGxhY2Vob2xkZXIocG9zLCB0ZXN0UG9zLm1hdGNoKSk7IHBvcy0tKSBibC0tO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5EZWZpbml0aW9uID8ge1xuICAgICAgICAgICAgICAgICAgICBsOiBibCxcbiAgICAgICAgICAgICAgICAgICAgZGVmOiBwb3NpdGlvbnNbYmxdID8gcG9zaXRpb25zW2JsXS5tYXRjaCA6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0gOiBibDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNsZWFyT3B0aW9uYWxUYWlsKGJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIGJ1ZmZlci5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHRlbXBsYXRlID0gZ2V0TWFza1RlbXBsYXRlKCEwLCAwLCAhMCwgdm9pZCAwLCAhMCksIGxtbnQ7IHZvaWQgMCAhPT0gKGxtbnQgPSB0ZW1wbGF0ZS5zaGlmdCgpKTsgKSBidWZmZXIucHVzaChsbW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXNDb21wbGV0ZShidWZmZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKG9wdHMuaXNDb21wbGV0ZSkpIHJldHVybiBvcHRzLmlzQ29tcGxldGUoYnVmZmVyLCBvcHRzKTtcbiAgICAgICAgICAgICAgICBpZiAoXCIqXCIgIT09IG9wdHMucmVwZWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb21wbGV0ZSA9ICExLCBscnAgPSBkZXRlcm1pbmVMYXN0UmVxdWlyZWRQb3NpdGlvbighMCksIGFtbCA9IHNlZWtQcmV2aW91cyhscnAubCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgPT09IGxycC5kZWYgfHwgbHJwLmRlZi5uZXdCbG9ja01hcmtlciB8fCBscnAuZGVmLm9wdGlvbmFsaXR5IHx8IGxycC5kZWYub3B0aW9uYWxRdWFudGlmaWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSA9ICEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gYW1sOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVzdCA9IGdldFRlc3RUZW1wbGF0ZShpKS5tYXRjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoITAgIT09IHRlc3Quc3RhdGljICYmIHZvaWQgMCA9PT0gbWFza3NldC52YWxpZFBvc2l0aW9uc1tpXSAmJiAhMCAhPT0gdGVzdC5vcHRpb25hbGl0eSAmJiAhMCAhPT0gdGVzdC5vcHRpb25hbFF1YW50aWZpZXIgfHwgITAgPT09IHRlc3Quc3RhdGljICYmIGJ1ZmZlcltpXSAhPT0gZ2V0UGxhY2Vob2xkZXIoaSwgdGVzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGUgPSAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBoYW5kbGVSZW1vdmUoaW5wdXQsIGssIHBvcywgc3RyaWN0LCBmcm9tSXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIGlmICgob3B0cy5udW1lcmljSW5wdXQgfHwgaXNSVEwpICYmIChrID09PSBrZXlDb2RlLkJBQ0tTUEFDRSA/IGsgPSBrZXlDb2RlLkRFTEVURSA6IGsgPT09IGtleUNvZGUuREVMRVRFICYmIChrID0ga2V5Q29kZS5CQUNLU1BBQ0UpLCBcbiAgICAgICAgICAgICAgICBpc1JUTCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBlbmQgPSBwb3MuZW5kO1xuICAgICAgICAgICAgICAgICAgICBwb3MuZW5kID0gcG9zLmJlZ2luLCBwb3MuYmVnaW4gPSBwZW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgbHZwID0gZ2V0TGFzdFZhbGlkUG9zaXRpb24odm9pZCAwLCAhMCksIG9mZnNldDtcbiAgICAgICAgICAgICAgICBpZiAocG9zLmVuZCA+PSBnZXRCdWZmZXIoKS5sZW5ndGggJiYgbHZwID49IHBvcy5lbmQgJiYgKHBvcy5lbmQgPSBsdnAgKyAxKSwgayA9PT0ga2V5Q29kZS5CQUNLU1BBQ0UgPyBwb3MuZW5kIC0gcG9zLmJlZ2luIDwgMSAmJiAocG9zLmJlZ2luID0gc2Vla1ByZXZpb3VzKHBvcy5iZWdpbikpIDogayA9PT0ga2V5Q29kZS5ERUxFVEUgJiYgcG9zLmJlZ2luID09PSBwb3MuZW5kICYmIChwb3MuZW5kID0gaXNNYXNrKHBvcy5lbmQsICEwLCAhMCkgPyBwb3MuZW5kICsgMSA6IHNlZWtOZXh0KHBvcy5lbmQpICsgMSksIFxuICAgICAgICAgICAgICAgICExICE9PSAob2Zmc2V0ID0gcmV2YWxpZGF0ZU1hc2socG9zKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEwICE9PSBzdHJpY3QgJiYgITEgIT09IG9wdHMua2VlcFN0YXRpYyB8fCBudWxsICE9PSBvcHRzLnJlZ2V4ICYmIC0xICE9PSBnZXRUZXN0KHBvcy5iZWdpbikubWF0Y2guZGVmLmluZGV4T2YoXCJ8XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYWx0ZXJuYXRlKCEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3UG9zID0gdm9pZCAwICE9PSByZXN1bHQuY2FyZXQgPyByZXN1bHQuY2FyZXQgOiByZXN1bHQucG9zID8gc2Vla05leHQocmVzdWx0LnBvcy5iZWdpbiA/IHJlc3VsdC5wb3MuYmVnaW4gOiByZXN1bHQucG9zKSA6IGdldExhc3RWYWxpZFBvc2l0aW9uKC0xLCAhMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGsgIT09IGtleUNvZGUuREVMRVRFIHx8IHBvcy5iZWdpbiA+IG5ld1BvcykgJiYgcG9zLmJlZ2luO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICEwICE9PSBzdHJpY3QgJiYgKG1hc2tzZXQucCA9IGsgPT09IGtleUNvZGUuREVMRVRFID8gcG9zLmJlZ2luICsgb2Zmc2V0IDogcG9zLmJlZ2luKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBhcHBseUlucHV0VmFsdWUoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQuaW5wdXRtYXNrLnJlZnJlc2hWYWx1ZSA9ICExLCAkLmlzRnVuY3Rpb24ob3B0cy5vbkJlZm9yZU1hc2spICYmICh2YWx1ZSA9IG9wdHMub25CZWZvcmVNYXNrLmNhbGwoaW5wdXRtYXNrLCB2YWx1ZSwgb3B0cykgfHwgdmFsdWUpLCBcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoXCJcIiksIGNoZWNrVmFsKGlucHV0LCAhMCwgITEsIHZhbHVlKSwgdW5kb1ZhbHVlID0gZ2V0QnVmZmVyKCkuam9pbihcIlwiKSwgXG4gICAgICAgICAgICAgICAgKG9wdHMuY2xlYXJNYXNrT25Mb3N0Rm9jdXMgfHwgb3B0cy5jbGVhckluY29tcGxldGUpICYmIGlucHV0LmlucHV0bWFzay5fdmFsdWVHZXQoKSA9PT0gZ2V0QnVmZmVyVGVtcGxhdGUoKS5qb2luKFwiXCIpICYmIC0xID09PSBnZXRMYXN0VmFsaWRQb3NpdGlvbigpICYmIGlucHV0LmlucHV0bWFzay5fdmFsdWVTZXQoXCJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBtYXNrKGVsZW0pIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc0VsZW1lbnRUeXBlU3VwcG9ydGVkKGlucHV0LCBvcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBhdGNoVmFsdWVQcm9wZXJ0eShucHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZUdldCwgdmFsdWVTZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwYXRjaFZhbGhvb2sodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkLnZhbEhvb2tzICYmICh2b2lkIDAgPT09ICQudmFsSG9va3NbdHlwZV0gfHwgITAgIT09ICQudmFsSG9va3NbdHlwZV0uaW5wdXRtYXNrcGF0Y2gpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWxob29rR2V0ID0gJC52YWxIb29rc1t0eXBlXSAmJiAkLnZhbEhvb2tzW3R5cGVdLmdldCA/ICQudmFsSG9va3NbdHlwZV0uZ2V0IDogZnVuY3Rpb24oZWxlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHZhbGhvb2tTZXQgPSAkLnZhbEhvb2tzW3R5cGVdICYmICQudmFsSG9va3NbdHlwZV0uc2V0ID8gJC52YWxIb29rc1t0eXBlXS5zZXQgOiBmdW5jdGlvbihlbGVtLCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0udmFsdWUgPSB2YWx1ZSwgZWxlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC52YWxIb29rc1t0eXBlXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGVsZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbS5pbnB1dG1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW0uaW5wdXRtYXNrLm9wdHMuYXV0b1VubWFzaykgcmV0dXJuIGVsZW0uaW5wdXRtYXNrLnVubWFza2VkdmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHZhbGhvb2tHZXQoZWxlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMSAhPT0gZ2V0TGFzdFZhbGlkUG9zaXRpb24odm9pZCAwLCB2b2lkIDAsIGVsZW0uaW5wdXRtYXNrLm1hc2tzZXQudmFsaWRQb3NpdGlvbnMpIHx8ICEwICE9PSBvcHRzLm51bGxhYmxlID8gcmVzdWx0IDogXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbGhvb2tHZXQoZWxlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoZWxlbSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdmFsaG9va1NldChlbGVtLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uaW5wdXRtYXNrICYmIGFwcGx5SW5wdXRWYWx1ZShlbGVtLCB2YWx1ZSksIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dG1hc2twYXRjaDogITBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXR0ZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRtYXNrID8gdGhpcy5pbnB1dG1hc2sub3B0cy5hdXRvVW5tYXNrID8gdGhpcy5pbnB1dG1hc2sudW5tYXNrZWR2YWx1ZSgpIDogLTEgIT09IGdldExhc3RWYWxpZFBvc2l0aW9uKCkgfHwgITAgIT09IG9wdHMubnVsbGFibGUgPyAodGhpcy5pbnB1dG1hc2suc2hhZG93Um9vdCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSA9PT0gdGhpcyAmJiBvcHRzLmNsZWFyTWFza09uTG9zdEZvY3VzID8gKGlzUlRMID8gY2xlYXJPcHRpb25hbFRhaWwoZ2V0QnVmZmVyKCkuc2xpY2UoKSkucmV2ZXJzZSgpIDogY2xlYXJPcHRpb25hbFRhaWwoZ2V0QnVmZmVyKCkuc2xpY2UoKSkpLmpvaW4oXCJcIikgOiB2YWx1ZUdldC5jYWxsKHRoaXMpIDogXCJcIiA6IHZhbHVlR2V0LmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzZXR0ZXIodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVNldC5jYWxsKHRoaXMsIHZhbHVlKSwgdGhpcy5pbnB1dG1hc2sgJiYgYXBwbHlJbnB1dFZhbHVlKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGluc3RhbGxOYXRpdmVWYWx1ZVNldEZhbGxiYWNrKG5wdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50UnVsZXIub24obnB0LCBcIm1vdXNlZW50ZXJcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMsIHZhbHVlID0gdGhpcy5pbnB1dG1hc2suX3ZhbHVlR2V0KCEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgIT09IChpc1JUTCA/IGdldEJ1ZmZlcigpLnJldmVyc2UoKSA6IGdldEJ1ZmZlcigpKS5qb2luKFwiXCIpICYmIGFwcGx5SW5wdXRWYWx1ZSh0aGlzLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5wdC5pbnB1dG1hc2suX192YWx1ZUdldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghMCAhPT0gb3B0cy5ub1ZhbHVlUGF0Y2hpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgT2JqZWN0LmdldFByb3RvdHlwZU9mICYmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YgPSBcIm9iamVjdFwiID09PSBfdHlwZW9mKFwidGVzdFwiLl9fcHJvdG9fXykgPyBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fcHJvdG9fXztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlUHJvcGVydHkgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5nZXRQcm90b3R5cGVPZihucHQpLCBcInZhbHVlXCIpIDogdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVQcm9wZXJ0eSAmJiB2YWx1ZVByb3BlcnR5LmdldCAmJiB2YWx1ZVByb3BlcnR5LnNldCA/ICh2YWx1ZUdldCA9IHZhbHVlUHJvcGVydHkuZ2V0LCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlU2V0ID0gdmFsdWVQcm9wZXJ0eS5zZXQsIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucHQsIFwidmFsdWVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZ2V0dGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldDogc2V0dGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKSA6IFwiaW5wdXRcIiAhPT0gbnB0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSAmJiAodmFsdWVHZXQgPSBmdW5jdGlvbiB2YWx1ZUdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0Q29udGVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHZhbHVlU2V0ID0gZnVuY3Rpb24gdmFsdWVTZXQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkobnB0LCBcInZhbHVlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGdldHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IHNldHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBkb2N1bWVudC5fX2xvb2t1cEdldHRlcl9fICYmIG5wdC5fX2xvb2t1cEdldHRlcl9fKFwidmFsdWVcIikgJiYgKHZhbHVlR2V0ID0gbnB0Ll9fbG9va3VwR2V0dGVyX18oXCJ2YWx1ZVwiKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlU2V0ID0gbnB0Ll9fbG9va3VwU2V0dGVyX18oXCJ2YWx1ZVwiKSwgbnB0Ll9fZGVmaW5lR2V0dGVyX18oXCJ2YWx1ZVwiLCBnZXR0ZXIpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnB0Ll9fZGVmaW5lU2V0dGVyX18oXCJ2YWx1ZVwiLCBzZXR0ZXIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnB0LmlucHV0bWFzay5fX3ZhbHVlR2V0ID0gdmFsdWVHZXQsIG5wdC5pbnB1dG1hc2suX192YWx1ZVNldCA9IHZhbHVlU2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBucHQuaW5wdXRtYXNrLl92YWx1ZUdldCA9IGZ1bmN0aW9uKG92ZXJydWxlUlRMKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpc1JUTCAmJiAhMCAhPT0gb3ZlcnJ1bGVSVEwgPyB2YWx1ZUdldC5jYWxsKHRoaXMuZWwpLnNwbGl0KFwiXCIpLnJldmVyc2UoKS5qb2luKFwiXCIpIDogdmFsdWVHZXQuY2FsbCh0aGlzLmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBucHQuaW5wdXRtYXNrLl92YWx1ZVNldCA9IGZ1bmN0aW9uKHZhbHVlLCBvdmVycnVsZVJUTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVNldC5jYWxsKHRoaXMuZWwsIG51bGwgPT0gdmFsdWUgPyBcIlwiIDogITAgIT09IG92ZXJydWxlUlRMICYmIGlzUlRMID8gdmFsdWUuc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIikgOiB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdm9pZCAwID09PSB2YWx1ZUdldCAmJiAodmFsdWVHZXQgPSBmdW5jdGlvbiB2YWx1ZUdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdmFsdWVTZXQgPSBmdW5jdGlvbiB2YWx1ZVNldCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgcGF0Y2hWYWxob29rKG5wdC50eXBlKSwgaW5zdGFsbE5hdGl2ZVZhbHVlU2V0RmFsbGJhY2sobnB0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0YXJlYVwiICE9PSBpbnB1dC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgJiYgb3B0cy5pZ25vcmFibGVzLnB1c2goa2V5Q29kZS5FTlRFUik7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50VHlwZSA9IGlucHV0LmdldEF0dHJpYnV0ZShcInR5cGVcIiksIGlzU3VwcG9ydGVkID0gXCJpbnB1dFwiID09PSBpbnB1dC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgJiYgLTEgIT09ICQuaW5BcnJheShlbGVtZW50VHlwZSwgb3B0cy5zdXBwb3J0c0lucHV0VHlwZSkgfHwgaW5wdXQuaXNDb250ZW50RWRpdGFibGUgfHwgXCJ0ZXh0YXJlYVwiID09PSBpbnB1dC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNTdXBwb3J0ZWQpIGlmIChcImlucHV0XCIgPT09IGlucHV0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBlbGVtZW50VHlwZSksIGlzU3VwcG9ydGVkID0gXCJ0ZXh0XCIgPT09IGVsLnR5cGUsIGVsID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlzU3VwcG9ydGVkID0gXCJwYXJ0aWFsXCI7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhMSAhPT0gaXNTdXBwb3J0ZWQgPyBwYXRjaFZhbHVlUHJvcGVydHkoaW5wdXQpIDogaW5wdXQuaW5wdXRtYXNrID0gdm9pZCAwLCBcbiAgICAgICAgICAgICAgICAgICAgaXNTdXBwb3J0ZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEV2ZW50UnVsZXIub2ZmKGVsZW0pO1xuICAgICAgICAgICAgICAgIHZhciBpc1N1cHBvcnRlZCA9IGlzRWxlbWVudFR5cGVTdXBwb3J0ZWQoZWxlbSwgb3B0cyk7XG4gICAgICAgICAgICAgICAgaWYgKCExICE9PSBpc1N1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICBlbCA9IGVsZW0sICRlbCA9ICQoZWwpLCBvcmlnaW5hbFBsYWNlaG9sZGVyID0gZWwucGxhY2Vob2xkZXIsIG1heExlbmd0aCA9IHZvaWQgMCAhPT0gZWwgPyBlbC5tYXhMZW5ndGggOiB2b2lkIDAsIFxuICAgICAgICAgICAgICAgICAgICAtMSA9PT0gbWF4TGVuZ3RoICYmIChtYXhMZW5ndGggPSB2b2lkIDApLCBcImlucHV0TW9kZVwiIGluIGVsICYmIG51bGwgPT09IGVsLmdldEF0dHJpYnV0ZShcImlucHV0bW9kZVwiKSAmJiAoZWwuaW5wdXRNb2RlID0gb3B0cy5pbnB1dG1vZGUsIFxuICAgICAgICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJpbnB1dG1vZGVcIiwgb3B0cy5pbnB1dG1vZGUpKSwgITAgPT09IGlzU3VwcG9ydGVkICYmIChvcHRzLnNob3dNYXNrT25Gb2N1cyA9IG9wdHMuc2hvd01hc2tPbkZvY3VzICYmIC0xID09PSBbIFwiY2MtbnVtYmVyXCIsIFwiY2MtZXhwXCIgXS5pbmRleE9mKGVsLmF1dG9jb21wbGV0ZSksIFxuICAgICAgICAgICAgICAgICAgICBpcGhvbmUgJiYgKG9wdHMuaW5zZXJ0TW9kZVZpc3VhbCA9ICExKSwgRXZlbnRSdWxlci5vbihlbCwgXCJzdWJtaXRcIiwgRXZlbnRIYW5kbGVycy5zdWJtaXRFdmVudCksIFxuICAgICAgICAgICAgICAgICAgICBFdmVudFJ1bGVyLm9uKGVsLCBcInJlc2V0XCIsIEV2ZW50SGFuZGxlcnMucmVzZXRFdmVudCksIEV2ZW50UnVsZXIub24oZWwsIFwiYmx1clwiLCBFdmVudEhhbmRsZXJzLmJsdXJFdmVudCksIFxuICAgICAgICAgICAgICAgICAgICBFdmVudFJ1bGVyLm9uKGVsLCBcImZvY3VzXCIsIEV2ZW50SGFuZGxlcnMuZm9jdXNFdmVudCksIEV2ZW50UnVsZXIub24oZWwsIFwiaW52YWxpZFwiLCBFdmVudEhhbmRsZXJzLmludmFsaWRFdmVudCksIFxuICAgICAgICAgICAgICAgICAgICBFdmVudFJ1bGVyLm9uKGVsLCBcImNsaWNrXCIsIEV2ZW50SGFuZGxlcnMuY2xpY2tFdmVudCksIEV2ZW50UnVsZXIub24oZWwsIFwibW91c2VsZWF2ZVwiLCBFdmVudEhhbmRsZXJzLm1vdXNlbGVhdmVFdmVudCksIFxuICAgICAgICAgICAgICAgICAgICBFdmVudFJ1bGVyLm9uKGVsLCBcIm1vdXNlZW50ZXJcIiwgRXZlbnRIYW5kbGVycy5tb3VzZWVudGVyRXZlbnQpLCBFdmVudFJ1bGVyLm9uKGVsLCBcInBhc3RlXCIsIEV2ZW50SGFuZGxlcnMucGFzdGVFdmVudCksIFxuICAgICAgICAgICAgICAgICAgICBFdmVudFJ1bGVyLm9uKGVsLCBcImN1dFwiLCBFdmVudEhhbmRsZXJzLmN1dEV2ZW50KSwgRXZlbnRSdWxlci5vbihlbCwgXCJjb21wbGV0ZVwiLCBvcHRzLm9uY29tcGxldGUpLCBcbiAgICAgICAgICAgICAgICAgICAgRXZlbnRSdWxlci5vbihlbCwgXCJpbmNvbXBsZXRlXCIsIG9wdHMub25pbmNvbXBsZXRlKSwgRXZlbnRSdWxlci5vbihlbCwgXCJjbGVhcmVkXCIsIG9wdHMub25jbGVhcmVkKSwgXG4gICAgICAgICAgICAgICAgICAgIG1vYmlsZSB8fCAhMCA9PT0gb3B0cy5pbnB1dEV2ZW50T25seSA/IGVsLnJlbW92ZUF0dHJpYnV0ZShcIm1heExlbmd0aFwiKSA6IChFdmVudFJ1bGVyLm9uKGVsLCBcImtleWRvd25cIiwgRXZlbnRIYW5kbGVycy5rZXlkb3duRXZlbnQpLCBcbiAgICAgICAgICAgICAgICAgICAgRXZlbnRSdWxlci5vbihlbCwgXCJrZXlwcmVzc1wiLCBFdmVudEhhbmRsZXJzLmtleXByZXNzRXZlbnQpKSwgRXZlbnRSdWxlci5vbihlbCwgXCJpbnB1dFwiLCBFdmVudEhhbmRsZXJzLmlucHV0RmFsbEJhY2tFdmVudCksIFxuICAgICAgICAgICAgICAgICAgICBFdmVudFJ1bGVyLm9uKGVsLCBcImNvbXBvc2l0aW9uZW5kXCIsIEV2ZW50SGFuZGxlcnMuY29tcG9zaXRpb25lbmRFdmVudCkpLCBFdmVudFJ1bGVyLm9uKGVsLCBcInNldHZhbHVlXCIsIEV2ZW50SGFuZGxlcnMuc2V0VmFsdWVFdmVudCksIFxuICAgICAgICAgICAgICAgICAgICB1bmRvVmFsdWUgPSBnZXRCdWZmZXJUZW1wbGF0ZSgpLmpvaW4oXCJcIik7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhY3RpdmVFbGVtZW50ID0gKGVsLmlucHV0bWFzay5zaGFkb3dSb290IHx8IGRvY3VtZW50KS5hY3RpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoXCJcIiAhPT0gZWwuaW5wdXRtYXNrLl92YWx1ZUdldCghMCkgfHwgITEgPT09IG9wdHMuY2xlYXJNYXNrT25Mb3N0Rm9jdXMgfHwgYWN0aXZlRWxlbWVudCA9PT0gZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGx5SW5wdXRWYWx1ZShlbCwgZWwuaW5wdXRtYXNrLl92YWx1ZUdldCghMCksIG9wdHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGdldEJ1ZmZlcigpLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAhMSA9PT0gaXNDb21wbGV0ZShidWZmZXIpICYmIG9wdHMuY2xlYXJJbmNvbXBsZXRlICYmIHJlc2V0TWFza1NldCgpLCBvcHRzLmNsZWFyTWFza09uTG9zdEZvY3VzICYmIGFjdGl2ZUVsZW1lbnQgIT09IGVsICYmICgtMSA9PT0gZ2V0TGFzdFZhbGlkUG9zaXRpb24oKSA/IGJ1ZmZlciA9IFtdIDogY2xlYXJPcHRpb25hbFRhaWwoYnVmZmVyKSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgKCExID09PSBvcHRzLmNsZWFyTWFza09uTG9zdEZvY3VzIHx8IG9wdHMuc2hvd01hc2tPbkZvY3VzICYmIGFjdGl2ZUVsZW1lbnQgPT09IGVsIHx8IFwiXCIgIT09IGVsLmlucHV0bWFzay5fdmFsdWVHZXQoITApKSAmJiB3cml0ZUJ1ZmZlcihlbCwgYnVmZmVyKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVFbGVtZW50ID09PSBlbCAmJiBjYXJldChlbCwgc2Vla05leHQoZ2V0TGFzdFZhbGlkUG9zaXRpb24oKSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gYWN0aW9uT2JqKSBzd2l0Y2ggKGFjdGlvbk9iai5hY3Rpb24pIHtcbiAgICAgICAgICAgICAgY2FzZSBcImlzQ29tcGxldGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZWwgPSBhY3Rpb25PYmouZWwsIGlzQ29tcGxldGUoZ2V0QnVmZmVyKCkpO1xuXG4gICAgICAgICAgICAgIGNhc2UgXCJ1bm1hc2tlZHZhbHVlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgMCAhPT0gZWwgJiYgdm9pZCAwID09PSBhY3Rpb25PYmoudmFsdWUgfHwgKHZhbHVlQnVmZmVyID0gYWN0aW9uT2JqLnZhbHVlLCBcbiAgICAgICAgICAgICAgICB2YWx1ZUJ1ZmZlciA9ICgkLmlzRnVuY3Rpb24ob3B0cy5vbkJlZm9yZU1hc2spICYmIG9wdHMub25CZWZvcmVNYXNrLmNhbGwoaW5wdXRtYXNrLCB2YWx1ZUJ1ZmZlciwgb3B0cykgfHwgdmFsdWVCdWZmZXIpLnNwbGl0KFwiXCIpLCBcbiAgICAgICAgICAgICAgICBjaGVja1ZhbC5jYWxsKHRoaXMsIHZvaWQgMCwgITEsICExLCB2YWx1ZUJ1ZmZlciksICQuaXNGdW5jdGlvbihvcHRzLm9uQmVmb3JlV3JpdGUpICYmIG9wdHMub25CZWZvcmVXcml0ZS5jYWxsKGlucHV0bWFzaywgdm9pZCAwLCBnZXRCdWZmZXIoKSwgMCwgb3B0cykpLCBcbiAgICAgICAgICAgICAgICB1bm1hc2tlZHZhbHVlKGVsKTtcblxuICAgICAgICAgICAgICBjYXNlIFwibWFza1wiOlxuICAgICAgICAgICAgICAgIG1hc2soZWwpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgXCJmb3JtYXRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVCdWZmZXIgPSAoJC5pc0Z1bmN0aW9uKG9wdHMub25CZWZvcmVNYXNrKSAmJiBvcHRzLm9uQmVmb3JlTWFzay5jYWxsKGlucHV0bWFzaywgYWN0aW9uT2JqLnZhbHVlLCBvcHRzKSB8fCBhY3Rpb25PYmoudmFsdWUpLnNwbGl0KFwiXCIpLCBcbiAgICAgICAgICAgICAgICBjaGVja1ZhbC5jYWxsKHRoaXMsIHZvaWQgMCwgITAsICExLCB2YWx1ZUJ1ZmZlciksIGFjdGlvbk9iai5tZXRhZGF0YSA/IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGlzUlRMID8gZ2V0QnVmZmVyKCkuc2xpY2UoKS5yZXZlcnNlKCkuam9pbihcIlwiKSA6IGdldEJ1ZmZlcigpLmpvaW4oXCJcIiksXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBtYXNrU2NvcGUuY2FsbCh0aGlzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IFwiZ2V0bWV0YWRhdGFcIlxuICAgICAgICAgICAgICAgICAgICB9LCBtYXNrc2V0LCBvcHRzKVxuICAgICAgICAgICAgICAgIH0gOiBpc1JUTCA/IGdldEJ1ZmZlcigpLnNsaWNlKCkucmV2ZXJzZSgpLmpvaW4oXCJcIikgOiBnZXRCdWZmZXIoKS5qb2luKFwiXCIpO1xuXG4gICAgICAgICAgICAgIGNhc2UgXCJpc1ZhbGlkXCI6XG4gICAgICAgICAgICAgICAgYWN0aW9uT2JqLnZhbHVlID8gKHZhbHVlQnVmZmVyID0gKCQuaXNGdW5jdGlvbihvcHRzLm9uQmVmb3JlTWFzaykgJiYgb3B0cy5vbkJlZm9yZU1hc2suY2FsbChpbnB1dG1hc2ssIGFjdGlvbk9iai52YWx1ZSwgb3B0cykgfHwgYWN0aW9uT2JqLnZhbHVlKS5zcGxpdChcIlwiKSwgXG4gICAgICAgICAgICAgICAgY2hlY2tWYWwuY2FsbCh0aGlzLCB2b2lkIDAsICEwLCAhMSwgdmFsdWVCdWZmZXIpKSA6IGFjdGlvbk9iai52YWx1ZSA9IGlzUlRMID8gZ2V0QnVmZmVyKCkuc2xpY2UoKS5yZXZlcnNlKCkuam9pbihcIlwiKSA6IGdldEJ1ZmZlcigpLmpvaW4oXCJcIik7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYnVmZmVyID0gZ2V0QnVmZmVyKCksIHJsID0gZGV0ZXJtaW5lTGFzdFJlcXVpcmVkUG9zaXRpb24oKSwgbG1pYiA9IGJ1ZmZlci5sZW5ndGggLSAxOyBybCA8IGxtaWIgJiYgIWlzTWFzayhsbWliKTsgbG1pYi0tKSA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlci5zcGxpY2UocmwsIGxtaWIgKyAxIC0gcmwpLCBpc0NvbXBsZXRlKGJ1ZmZlcikgJiYgYWN0aW9uT2JqLnZhbHVlID09PSAoaXNSVEwgPyBnZXRCdWZmZXIoKS5zbGljZSgpLnJldmVyc2UoKS5qb2luKFwiXCIpIDogZ2V0QnVmZmVyKCkuam9pbihcIlwiKSk7XG5cbiAgICAgICAgICAgICAgY2FzZSBcImdldGVtcHR5bWFza1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRCdWZmZXJUZW1wbGF0ZSgpLmpvaW4oXCJcIik7XG5cbiAgICAgICAgICAgICAgY2FzZSBcInJlbW92ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChlbCAmJiBlbC5pbnB1dG1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgJC5kYXRhKGVsLCBcIl9pbnB1dG1hc2tfb3B0c1wiLCBudWxsKSwgJGVsID0gJChlbCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjdiA9IG9wdHMuYXV0b1VubWFzayA/IHVubWFza2VkdmFsdWUoZWwpIDogZWwuaW5wdXRtYXNrLl92YWx1ZUdldChvcHRzLmF1dG9Vbm1hc2spLCB2YWx1ZVByb3BlcnR5O1xuICAgICAgICAgICAgICAgICAgICBjdiAhPT0gZ2V0QnVmZmVyVGVtcGxhdGUoKS5qb2luKFwiXCIpID8gZWwuaW5wdXRtYXNrLl92YWx1ZVNldChjdiwgb3B0cy5hdXRvVW5tYXNrKSA6IGVsLmlucHV0bWFzay5fdmFsdWVTZXQoXCJcIiksIFxuICAgICAgICAgICAgICAgICAgICBFdmVudFJ1bGVyLm9mZihlbCksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mID8gKHZhbHVlUHJvcGVydHkgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5nZXRQcm90b3R5cGVPZihlbCksIFwidmFsdWVcIiksIFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVByb3BlcnR5ICYmIGVsLmlucHV0bWFzay5fX3ZhbHVlR2V0ICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbCwgXCJ2YWx1ZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGVsLmlucHV0bWFzay5fX3ZhbHVlR2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBlbC5pbnB1dG1hc2suX192YWx1ZVNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICAgICAgICAgICAgICAgICAgfSkpIDogZG9jdW1lbnQuX19sb29rdXBHZXR0ZXJfXyAmJiBlbC5fX2xvb2t1cEdldHRlcl9fKFwidmFsdWVcIikgJiYgZWwuaW5wdXRtYXNrLl9fdmFsdWVHZXQgJiYgKGVsLl9fZGVmaW5lR2V0dGVyX18oXCJ2YWx1ZVwiLCBlbC5pbnB1dG1hc2suX192YWx1ZUdldCksIFxuICAgICAgICAgICAgICAgICAgICBlbC5fX2RlZmluZVNldHRlcl9fKFwidmFsdWVcIiwgZWwuaW5wdXRtYXNrLl9fdmFsdWVTZXQpKSwgZWwuaW5wdXRtYXNrID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZWw7XG5cbiAgICAgICAgICAgICAgY2FzZSBcImdldG1ldGFkYXRhXCI6XG4gICAgICAgICAgICAgICAgaWYgKCQuaXNBcnJheShtYXNrc2V0Lm1ldGFkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWFza1RhcmdldCA9IGdldE1hc2tUZW1wbGF0ZSghMCwgMCwgITEpLmpvaW4oXCJcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLmVhY2gobWFza3NldC5tZXRhZGF0YSwgZnVuY3Rpb24obmR4LCBtdGR0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobXRkdC5tYXNrID09PSBtYXNrVGFyZ2V0KSByZXR1cm4gbWFza1RhcmdldCA9IG10ZHQsICExO1xuICAgICAgICAgICAgICAgICAgICB9KSwgbWFza1RhcmdldDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hc2tzZXQubWV0YWRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgICAgICAgICAgfSA6IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICAgICAgICAgIH0sIF90eXBlb2Yob2JqKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgSW5wdXRtYXNrID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKSwgJCA9IElucHV0bWFzay5kZXBlbmRlbmN5TGliLCBrZXlDb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKSwgZm9ybWF0Q29kZSA9IHtcbiAgICAgICAgICAgIGQ6IFsgXCJbMS05XXxbMTJdWzAtOV18M1swMV1cIiwgRGF0ZS5wcm90b3R5cGUuc2V0RGF0ZSwgXCJkYXlcIiwgRGF0ZS5wcm90b3R5cGUuZ2V0RGF0ZSBdLFxuICAgICAgICAgICAgZGQ6IFsgXCIwWzEtOV18WzEyXVswLTldfDNbMDFdXCIsIERhdGUucHJvdG90eXBlLnNldERhdGUsIFwiZGF5XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYWQoRGF0ZS5wcm90b3R5cGUuZ2V0RGF0ZS5jYWxsKHRoaXMpLCAyKTtcbiAgICAgICAgICAgIH0gXSxcbiAgICAgICAgICAgIGRkZDogWyBcIlwiIF0sXG4gICAgICAgICAgICBkZGRkOiBbIFwiXCIgXSxcbiAgICAgICAgICAgIG06IFsgXCJbMS05XXwxWzAxMl1cIiwgRGF0ZS5wcm90b3R5cGUuc2V0TW9udGgsIFwibW9udGhcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIERhdGUucHJvdG90eXBlLmdldE1vbnRoLmNhbGwodGhpcykgKyAxO1xuICAgICAgICAgICAgfSBdLFxuICAgICAgICAgICAgbW06IFsgXCIwWzEtOV18MVswMTJdXCIsIERhdGUucHJvdG90eXBlLnNldE1vbnRoLCBcIm1vbnRoXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYWQoRGF0ZS5wcm90b3R5cGUuZ2V0TW9udGguY2FsbCh0aGlzKSArIDEsIDIpO1xuICAgICAgICAgICAgfSBdLFxuICAgICAgICAgICAgbW1tOiBbIFwiXCIgXSxcbiAgICAgICAgICAgIG1tbW06IFsgXCJcIiBdLFxuICAgICAgICAgICAgeXk6IFsgXCJbMC05XXsyfVwiLCBEYXRlLnByb3RvdHlwZS5zZXRGdWxsWWVhciwgXCJ5ZWFyXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYWQoRGF0ZS5wcm90b3R5cGUuZ2V0RnVsbFllYXIuY2FsbCh0aGlzKSwgMik7XG4gICAgICAgICAgICB9IF0sXG4gICAgICAgICAgICB5eXl5OiBbIFwiWzAtOV17NH1cIiwgRGF0ZS5wcm90b3R5cGUuc2V0RnVsbFllYXIsIFwieWVhclwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFkKERhdGUucHJvdG90eXBlLmdldEZ1bGxZZWFyLmNhbGwodGhpcyksIDQpO1xuICAgICAgICAgICAgfSBdLFxuICAgICAgICAgICAgaDogWyBcIlsxLTldfDFbMC0yXVwiLCBEYXRlLnByb3RvdHlwZS5zZXRIb3VycywgXCJob3Vyc1wiLCBEYXRlLnByb3RvdHlwZS5nZXRIb3VycyBdLFxuICAgICAgICAgICAgaGg6IFsgXCIwWzEtOV18MVswLTJdXCIsIERhdGUucHJvdG90eXBlLnNldEhvdXJzLCBcImhvdXJzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYWQoRGF0ZS5wcm90b3R5cGUuZ2V0SG91cnMuY2FsbCh0aGlzKSwgMik7XG4gICAgICAgICAgICB9IF0sXG4gICAgICAgICAgICBoeDogWyBmdW5jdGlvbih4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiWzAtOV17XCIuY29uY2F0KHgsIFwifVwiKTtcbiAgICAgICAgICAgIH0sIERhdGUucHJvdG90eXBlLnNldEhvdXJzLCBcImhvdXJzXCIsIGZ1bmN0aW9uKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRGF0ZS5wcm90b3R5cGUuZ2V0SG91cnM7XG4gICAgICAgICAgICB9IF0sXG4gICAgICAgICAgICBIOiBbIFwiMT9bMC05XXwyWzAtM11cIiwgRGF0ZS5wcm90b3R5cGUuc2V0SG91cnMsIFwiaG91cnNcIiwgRGF0ZS5wcm90b3R5cGUuZ2V0SG91cnMgXSxcbiAgICAgICAgICAgIEhIOiBbIFwiMFswLTldfDFbMC05XXwyWzAtM11cIiwgRGF0ZS5wcm90b3R5cGUuc2V0SG91cnMsIFwiaG91cnNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhZChEYXRlLnByb3RvdHlwZS5nZXRIb3Vycy5jYWxsKHRoaXMpLCAyKTtcbiAgICAgICAgICAgIH0gXSxcbiAgICAgICAgICAgIEh4OiBbIGZ1bmN0aW9uKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJbMC05XXtcIi5jb25jYXQoeCwgXCJ9XCIpO1xuICAgICAgICAgICAgfSwgRGF0ZS5wcm90b3R5cGUuc2V0SG91cnMsIFwiaG91cnNcIiwgZnVuY3Rpb24oeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhZChEYXRlLnByb3RvdHlwZS5nZXRIb3Vycy5jYWxsKHRoaXMpLCB4KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBdLFxuICAgICAgICAgICAgTTogWyBcIlsxLTVdP1swLTldXCIsIERhdGUucHJvdG90eXBlLnNldE1pbnV0ZXMsIFwibWludXRlc1wiLCBEYXRlLnByb3RvdHlwZS5nZXRNaW51dGVzIF0sXG4gICAgICAgICAgICBNTTogWyBcIjBbMC05XXwxWzAtOV18MlswLTldfDNbMC05XXw0WzAtOV18NVswLTldXCIsIERhdGUucHJvdG90eXBlLnNldE1pbnV0ZXMsIFwibWludXRlc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFkKERhdGUucHJvdG90eXBlLmdldE1pbnV0ZXMuY2FsbCh0aGlzKSwgMik7XG4gICAgICAgICAgICB9IF0sXG4gICAgICAgICAgICBzOiBbIFwiWzEtNV0/WzAtOV1cIiwgRGF0ZS5wcm90b3R5cGUuc2V0U2Vjb25kcywgXCJzZWNvbmRzXCIsIERhdGUucHJvdG90eXBlLmdldFNlY29uZHMgXSxcbiAgICAgICAgICAgIHNzOiBbIFwiMFswLTldfDFbMC05XXwyWzAtOV18M1swLTldfDRbMC05XXw1WzAtOV1cIiwgRGF0ZS5wcm90b3R5cGUuc2V0U2Vjb25kcywgXCJzZWNvbmRzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYWQoRGF0ZS5wcm90b3R5cGUuZ2V0U2Vjb25kcy5jYWxsKHRoaXMpLCAyKTtcbiAgICAgICAgICAgIH0gXSxcbiAgICAgICAgICAgIGw6IFsgXCJbMC05XXszfVwiLCBEYXRlLnByb3RvdHlwZS5zZXRNaWxsaXNlY29uZHMsIFwibWlsbGlzZWNvbmRzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYWQoRGF0ZS5wcm90b3R5cGUuZ2V0TWlsbGlzZWNvbmRzLmNhbGwodGhpcyksIDMpO1xuICAgICAgICAgICAgfSBdLFxuICAgICAgICAgICAgTDogWyBcIlswLTldezJ9XCIsIERhdGUucHJvdG90eXBlLnNldE1pbGxpc2Vjb25kcywgXCJtaWxsaXNlY29uZHNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhZChEYXRlLnByb3RvdHlwZS5nZXRNaWxsaXNlY29uZHMuY2FsbCh0aGlzKSwgMik7XG4gICAgICAgICAgICB9IF0sXG4gICAgICAgICAgICB0OiBbIFwiW2FwXVwiIF0sXG4gICAgICAgICAgICB0dDogWyBcIlthcF1tXCIgXSxcbiAgICAgICAgICAgIFQ6IFsgXCJbQVBdXCIgXSxcbiAgICAgICAgICAgIFRUOiBbIFwiW0FQXU1cIiBdLFxuICAgICAgICAgICAgWjogWyBcIlwiIF0sXG4gICAgICAgICAgICBvOiBbIFwiXCIgXSxcbiAgICAgICAgICAgIFM6IFsgXCJcIiBdXG4gICAgICAgIH0sIGZvcm1hdEFsaWFzID0ge1xuICAgICAgICAgICAgaXNvRGF0ZTogXCJ5eXl5LW1tLWRkXCIsXG4gICAgICAgICAgICBpc29UaW1lOiBcIkhIOk1NOnNzXCIsXG4gICAgICAgICAgICBpc29EYXRlVGltZTogXCJ5eXl5LW1tLWRkJ1QnSEg6TU06c3NcIixcbiAgICAgICAgICAgIGlzb1V0Y0RhdGVUaW1lOiBcIlVUQzp5eXl5LW1tLWRkJ1QnSEg6TU06c3MnWidcIlxuICAgICAgICB9O1xuICAgICAgICBmdW5jdGlvbiBmb3JtYXRjb2RlKG1hdGNoKSB7XG4gICAgICAgICAgICB2YXIgZHluTWF0Y2hlcyA9IG5ldyBSZWdFeHAoXCJcXFxcZCskXCIpLmV4ZWMobWF0Y2hbMF0pO1xuICAgICAgICAgICAgaWYgKGR5bk1hdGNoZXMgJiYgdm9pZCAwICE9PSBkeW5NYXRjaGVzWzBdKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZjb2RlID0gZm9ybWF0Q29kZVttYXRjaFswXVswXSArIFwieFwiXS5zbGljZShcIlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmNvZGVbMF0gPSBmY29kZVswXShkeW5NYXRjaGVzWzBdKSwgZmNvZGVbM10gPSBmY29kZVszXShkeW5NYXRjaGVzWzBdKSwgZmNvZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9ybWF0Q29kZVttYXRjaFswXV0pIHJldHVybiBmb3JtYXRDb2RlW21hdGNoWzBdXTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnZXRUb2tlbml6ZXIob3B0cykge1xuICAgICAgICAgICAgaWYgKCFvcHRzLnRva2VuaXplcikge1xuICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBbXSwgZHludG9rZW5zID0gW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbmR4IGluIGZvcm1hdENvZGUpIGlmICgvXFwuKngkLy50ZXN0KG5keCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGR5blRva2VuID0gbmR4WzBdICsgXCJcXFxcZCtcIjtcbiAgICAgICAgICAgICAgICAgICAgLTEgPT09IGR5bnRva2Vucy5pbmRleE9mKGR5blRva2VuKSAmJiBkeW50b2tlbnMucHVzaChkeW5Ub2tlbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIC0xID09PSB0b2tlbnMuaW5kZXhPZihuZHhbMF0pICYmIHRva2Vucy5wdXNoKG5keFswXSk7XG4gICAgICAgICAgICAgICAgb3B0cy50b2tlbml6ZXIgPSBcIihcIiArICgwIDwgZHludG9rZW5zLmxlbmd0aCA/IGR5bnRva2Vucy5qb2luKFwifFwiKSArIFwifFwiIDogXCJcIikgKyB0b2tlbnMuam9pbihcIit8XCIpICsgXCIpKz98LlwiLCBcbiAgICAgICAgICAgICAgICBvcHRzLnRva2VuaXplciA9IG5ldyBSZWdFeHAob3B0cy50b2tlbml6ZXIsIFwiZ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvcHRzLnRva2VuaXplcjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc1ZhbGlkRGF0ZShkYXRlUGFydHMsIGN1cnJlbnRSZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiAoIWlzRmluaXRlKGRhdGVQYXJ0cy5yYXdkYXkpIHx8IFwiMjlcIiA9PSBkYXRlUGFydHMuZGF5ICYmICFpc0Zpbml0ZShkYXRlUGFydHMucmF3eWVhcikgfHwgbmV3IERhdGUoZGF0ZVBhcnRzLmRhdGUuZ2V0RnVsbFllYXIoKSwgaXNGaW5pdGUoZGF0ZVBhcnRzLnJhd21vbnRoKSA/IGRhdGVQYXJ0cy5tb250aCA6IGRhdGVQYXJ0cy5kYXRlLmdldE1vbnRoKCkgKyAxLCAwKS5nZXREYXRlKCkgPj0gZGF0ZVBhcnRzLmRheSkgJiYgY3VycmVudFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc0RhdGVJblJhbmdlKGRhdGVQYXJ0cywgb3B0cykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICEwO1xuICAgICAgICAgICAgaWYgKG9wdHMubWluKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGVQYXJ0cy5yYXd5ZWFyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByYXdZZWFyID0gZGF0ZVBhcnRzLnJhd3llYXIucmVwbGFjZSgvW14wLTldL2csIFwiXCIpLCBtaW5ZZWFyID0gb3B0cy5taW4ueWVhci5zdWJzdHIoMCwgcmF3WWVhci5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtaW5ZZWFyIDw9IHJhd1llYXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGVQYXJ0cy55ZWFyID09PSBkYXRlUGFydHMucmF3eWVhciAmJiBvcHRzLm1pbi5kYXRlLmdldFRpbWUoKSA9PSBvcHRzLm1pbi5kYXRlLmdldFRpbWUoKSAmJiAocmVzdWx0ID0gb3B0cy5taW4uZGF0ZS5nZXRUaW1lKCkgPD0gZGF0ZVBhcnRzLmRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgJiYgb3B0cy5tYXggJiYgb3B0cy5tYXguZGF0ZS5nZXRUaW1lKCkgPT0gb3B0cy5tYXguZGF0ZS5nZXRUaW1lKCkgJiYgKHJlc3VsdCA9IG9wdHMubWF4LmRhdGUuZ2V0VGltZSgpID49IGRhdGVQYXJ0cy5kYXRlLmdldFRpbWUoKSksIFxuICAgICAgICAgICAgcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlKGZvcm1hdCwgZGF0ZU9ialZhbHVlLCBvcHRzLCByYXcpIHtcbiAgICAgICAgICAgIHZhciBtYXNrID0gXCJcIiwgbWF0Y2gsIGZjb2RlO1xuICAgICAgICAgICAgZm9yIChnZXRUb2tlbml6ZXIob3B0cykubGFzdEluZGV4ID0gMDsgbWF0Y2ggPSBnZXRUb2tlbml6ZXIob3B0cykuZXhlYyhmb3JtYXQpOyApIGlmICh2b2lkIDAgPT09IGRhdGVPYmpWYWx1ZSkgaWYgKGZjb2RlID0gZm9ybWF0Y29kZShtYXRjaCkpIG1hc2sgKz0gXCIoXCIgKyBmY29kZVswXSArIFwiKVwiOyBlbHNlIHN3aXRjaCAobWF0Y2hbMF0pIHtcbiAgICAgICAgICAgICAgY2FzZSBcIltcIjpcbiAgICAgICAgICAgICAgICBtYXNrICs9IFwiKFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgXCJdXCI6XG4gICAgICAgICAgICAgICAgbWFzayArPSBcIik/XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBtYXNrICs9IElucHV0bWFzay5lc2NhcGVSZWdleChtYXRjaFswXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZjb2RlID0gZm9ybWF0Y29kZShtYXRjaCkpIGlmICghMCAhPT0gcmF3ICYmIGZjb2RlWzNdKSB7XG4gICAgICAgICAgICAgICAgdmFyIGdldEZuID0gZmNvZGVbM107XG4gICAgICAgICAgICAgICAgbWFzayArPSBnZXRGbi5jYWxsKGRhdGVPYmpWYWx1ZS5kYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBmY29kZVsyXSA/IG1hc2sgKz0gZGF0ZU9ialZhbHVlW1wicmF3XCIgKyBmY29kZVsyXV0gOiBtYXNrICs9IG1hdGNoWzBdOyBlbHNlIG1hc2sgKz0gbWF0Y2hbMF07XG4gICAgICAgICAgICByZXR1cm4gbWFzaztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBwYWQodmFsLCBsZW4pIHtcbiAgICAgICAgICAgIGZvciAodmFsID0gU3RyaW5nKHZhbCksIGxlbiA9IGxlbiB8fCAyOyB2YWwubGVuZ3RoIDwgbGVuOyApIHZhbCA9IFwiMFwiICsgdmFsO1xuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhbmFseXNlTWFzayhtYXNrU3RyaW5nLCBmb3JtYXQsIG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBkYXRlT2JqID0ge1xuICAgICAgICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKDEsIDAsIDEpXG4gICAgICAgICAgICB9LCB0YXJnZXRQcm9wLCBtYXNrID0gbWFza1N0cmluZywgbWF0Y2gsIGRhdGVPcGVyYXRpb247XG4gICAgICAgICAgICBmdW5jdGlvbiBleHRlbmRQcm9wZXJ0eSh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBjb3JyZWN0ZWRWYWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1teMC05XS9nLCBcIjBcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvcnJlY3RlZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gc2V0VmFsdWUoZGF0ZU9iaiwgdmFsdWUsIG9wdHMpIHtcbiAgICAgICAgICAgICAgICBkYXRlT2JqW3RhcmdldFByb3BdID0gZXh0ZW5kUHJvcGVydHkodmFsdWUpLCBkYXRlT2JqW1wicmF3XCIgKyB0YXJnZXRQcm9wXSA9IHZhbHVlLCBcbiAgICAgICAgICAgICAgICB2b2lkIDAgIT09IGRhdGVPcGVyYXRpb24gJiYgZGF0ZU9wZXJhdGlvbi5jYWxsKGRhdGVPYmouZGF0ZSwgXCJtb250aFwiID09IHRhcmdldFByb3AgPyBwYXJzZUludChkYXRlT2JqW3RhcmdldFByb3BdKSAtIDEgOiBkYXRlT2JqW3RhcmdldFByb3BdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcInN0cmluZ1wiID09IHR5cGVvZiBtYXNrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChnZXRUb2tlbml6ZXIob3B0cykubGFzdEluZGV4ID0gMDsgbWF0Y2ggPSBnZXRUb2tlbml6ZXIob3B0cykuZXhlYyhmb3JtYXQpOyApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gbWFzay5zbGljZSgwLCBtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXRDb2RlLmhhc093blByb3BlcnR5KG1hdGNoWzBdKSAmJiAodGFyZ2V0UHJvcCA9IGZvcm1hdENvZGVbbWF0Y2hbMF1dWzJdLCBkYXRlT3BlcmF0aW9uID0gZm9ybWF0Q29kZVttYXRjaFswXV1bMV0sIFxuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZShkYXRlT2JqLCB2YWx1ZSwgb3B0cykpLCBtYXNrID0gbWFzay5zbGljZSh2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZU9iajtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXNrICYmIFwib2JqZWN0XCIgPT09IF90eXBlb2YobWFzaykgJiYgbWFzay5oYXNPd25Qcm9wZXJ0eShcImRhdGVcIikpIHJldHVybiBtYXNrO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGltcG9ydERhdGUoZGF0ZU9iaiwgb3B0cykge1xuICAgICAgICAgICAgdmFyIG1hdGNoLCBkYXRlID0gXCJcIjtcbiAgICAgICAgICAgIGZvciAoZ2V0VG9rZW5pemVyKG9wdHMpLmxhc3RJbmRleCA9IDA7IG1hdGNoID0gZ2V0VG9rZW5pemVyKG9wdHMpLmV4ZWMob3B0cy5pbnB1dEZvcm1hdCk7ICkgXCJkXCIgPT09IG1hdGNoWzBdLmNoYXJBdCgwKSA/IGRhdGUgKz0gcGFkKGRhdGVPYmouZ2V0RGF0ZSgpLCBtYXRjaFswXS5sZW5ndGgpIDogXCJtXCIgPT09IG1hdGNoWzBdLmNoYXJBdCgwKSA/IGRhdGUgKz0gcGFkKGRhdGVPYmouZ2V0TW9udGgoKSArIDEsIG1hdGNoWzBdLmxlbmd0aCkgOiBcInl5eXlcIiA9PT0gbWF0Y2hbMF0gPyBkYXRlICs9IGRhdGVPYmouZ2V0RnVsbFllYXIoKS50b1N0cmluZygpIDogXCJ5XCIgPT09IG1hdGNoWzBdLmNoYXJBdCgwKSAmJiAoZGF0ZSArPSBwYWQoZGF0ZU9iai5nZXRZZWFyKCksIG1hdGNoWzBdLmxlbmd0aCkpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2V0VG9rZW5NYXRjaChwb3MsIG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBjYWxjUG9zID0gMCwgdGFyZ2V0TWF0Y2gsIG1hdGNoLCBtYXRjaExlbmd0aCA9IDA7XG4gICAgICAgICAgICBmb3IgKGdldFRva2VuaXplcihvcHRzKS5sYXN0SW5kZXggPSAwOyBtYXRjaCA9IGdldFRva2VuaXplcihvcHRzKS5leGVjKG9wdHMuaW5wdXRGb3JtYXQpOyApIHtcbiAgICAgICAgICAgICAgICB2YXIgZHluTWF0Y2hlcyA9IG5ldyBSZWdFeHAoXCJcXFxcZCskXCIpLmV4ZWMobWF0Y2hbMF0pO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaExlbmd0aCA9IGR5bk1hdGNoZXMgPyBwYXJzZUludChkeW5NYXRjaGVzWzBdKSA6IG1hdGNoWzBdLmxlbmd0aCwgY2FsY1BvcyArPSBtYXRjaExlbmd0aCwgXG4gICAgICAgICAgICAgICAgcG9zIDw9IGNhbGNQb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TWF0Y2ggPSBtYXRjaCwgbWF0Y2ggPSBnZXRUb2tlbml6ZXIob3B0cykuZXhlYyhvcHRzLmlucHV0Rm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRNYXRjaEluZGV4OiBjYWxjUG9zIC0gbWF0Y2hMZW5ndGgsXG4gICAgICAgICAgICAgICAgbmV4dE1hdGNoOiBtYXRjaCxcbiAgICAgICAgICAgICAgICB0YXJnZXRNYXRjaDogdGFyZ2V0TWF0Y2hcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgSW5wdXRtYXNrLmV4dGVuZEFsaWFzZXMoe1xuICAgICAgICAgICAgZGF0ZXRpbWU6IHtcbiAgICAgICAgICAgICAgICBtYXNrOiBmdW5jdGlvbiBtYXNrKG9wdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdHMubnVtZXJpY0lucHV0ID0gITEsIGZvcm1hdENvZGUuUyA9IG9wdHMuaTE4bi5vcmRpbmFsU3VmZml4LmpvaW4oXCJ8XCIpLCBcbiAgICAgICAgICAgICAgICAgICAgb3B0cy5pbnB1dEZvcm1hdCA9IGZvcm1hdEFsaWFzW29wdHMuaW5wdXRGb3JtYXRdIHx8IG9wdHMuaW5wdXRGb3JtYXQsIG9wdHMuZGlzcGxheUZvcm1hdCA9IGZvcm1hdEFsaWFzW29wdHMuZGlzcGxheUZvcm1hdF0gfHwgb3B0cy5kaXNwbGF5Rm9ybWF0IHx8IG9wdHMuaW5wdXRGb3JtYXQsIFxuICAgICAgICAgICAgICAgICAgICBvcHRzLm91dHB1dEZvcm1hdCA9IGZvcm1hdEFsaWFzW29wdHMub3V0cHV0Rm9ybWF0XSB8fCBvcHRzLm91dHB1dEZvcm1hdCB8fCBvcHRzLmlucHV0Rm9ybWF0LCBcbiAgICAgICAgICAgICAgICAgICAgb3B0cy5wbGFjZWhvbGRlciA9IFwiXCIgIT09IG9wdHMucGxhY2Vob2xkZXIgPyBvcHRzLnBsYWNlaG9sZGVyIDogb3B0cy5pbnB1dEZvcm1hdC5yZXBsYWNlKC9bW1xcXV0vLCBcIlwiKSwgXG4gICAgICAgICAgICAgICAgICAgIG9wdHMucmVnZXggPSBwYXJzZShvcHRzLmlucHV0Rm9ybWF0LCB2b2lkIDAsIG9wdHMpLCBvcHRzLm1pbiA9IGFuYWx5c2VNYXNrKG9wdHMubWluLCBvcHRzLmlucHV0Rm9ybWF0LCBvcHRzKSwgXG4gICAgICAgICAgICAgICAgICAgIG9wdHMubWF4ID0gYW5hbHlzZU1hc2sob3B0cy5tYXgsIG9wdHMuaW5wdXRGb3JtYXQsIG9wdHMpLCBudWxsO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiXCIsXG4gICAgICAgICAgICAgICAgaW5wdXRGb3JtYXQ6IFwiaXNvRGF0ZVRpbWVcIixcbiAgICAgICAgICAgICAgICBkaXNwbGF5Rm9ybWF0OiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgb3V0cHV0Rm9ybWF0OiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgbWluOiBudWxsLFxuICAgICAgICAgICAgICAgIG1heDogbnVsbCxcbiAgICAgICAgICAgICAgICBza2lwT3B0aW9uYWxQYXJ0Q2hhcmFjdGVyOiBcIlwiLFxuICAgICAgICAgICAgICAgIGkxOG46IHtcbiAgICAgICAgICAgICAgICAgICAgZGF5TmFtZXM6IFsgXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIiwgXCJTdW5cIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIiwgXCJGcmlkYXlcIiwgXCJTYXR1cmRheVwiLCBcIlN1bmRheVwiIF0sXG4gICAgICAgICAgICAgICAgICAgIG1vbnRoTmFtZXM6IFsgXCJKYW5cIiwgXCJGZWJcIiwgXCJNYXJcIiwgXCJBcHJcIiwgXCJNYXlcIiwgXCJKdW5cIiwgXCJKdWxcIiwgXCJBdWdcIiwgXCJTZXBcIiwgXCJPY3RcIiwgXCJOb3ZcIiwgXCJEZWNcIiwgXCJKYW51YXJ5XCIsIFwiRmVicnVhcnlcIiwgXCJNYXJjaFwiLCBcIkFwcmlsXCIsIFwiTWF5XCIsIFwiSnVuZVwiLCBcIkp1bHlcIiwgXCJBdWd1c3RcIiwgXCJTZXB0ZW1iZXJcIiwgXCJPY3RvYmVyXCIsIFwiTm92ZW1iZXJcIiwgXCJEZWNlbWJlclwiIF0sXG4gICAgICAgICAgICAgICAgICAgIG9yZGluYWxTdWZmaXg6IFsgXCJzdFwiLCBcIm5kXCIsIFwicmRcIiwgXCJ0aFwiIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHByZVZhbGlkYXRpb246IGZ1bmN0aW9uIHByZVZhbGlkYXRpb24oYnVmZmVyLCBwb3MsIGMsIGlzU2VsZWN0aW9uLCBvcHRzLCBtYXNrc2V0LCBjYXJldFBvcywgc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJpY3QpIHJldHVybiAhMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKGMpICYmIGJ1ZmZlcltwb3NdICE9PSBjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW5NYXRjaCA9IGdldFRva2VuTWF0Y2gocG9zLCBvcHRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbk1hdGNoLm5leHRNYXRjaCAmJiB0b2tlbk1hdGNoLm5leHRNYXRjaFswXSA9PT0gYyAmJiAxIDwgdG9rZW5NYXRjaC50YXJnZXRNYXRjaFswXS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsaWRhdG9yID0gZm9ybWF0Q29kZVt0b2tlbk1hdGNoLnRhcmdldE1hdGNoWzBdXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3IFJlZ0V4cCh2YWxpZGF0b3IpLnRlc3QoXCIwXCIgKyBidWZmZXJbcG9zIC0gMV0pKSByZXR1cm4gYnVmZmVyW3Bvc10gPSBidWZmZXJbcG9zIC0gMV0sIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltwb3MgLSAxXSA9IFwiMFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1enp5OiAhMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyOiBidWZmZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hGcm9tQnVmZmVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogcG9zIC0gMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogcG9zICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3M6IHBvcyArIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBvc3RWYWxpZGF0aW9uOiBmdW5jdGlvbiBwb3N0VmFsaWRhdGlvbihidWZmZXIsIHBvcywgYywgY3VycmVudFJlc3VsdCwgb3B0cywgbWFza3NldCwgc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJpY3QpIHJldHVybiAhMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuTWF0Y2gsIHZhbGlkYXRvcjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCExID09PSBjdXJyZW50UmVzdWx0KSByZXR1cm4gdG9rZW5NYXRjaCA9IGdldFRva2VuTWF0Y2gocG9zICsgMSwgb3B0cyksIHRva2VuTWF0Y2gudGFyZ2V0TWF0Y2ggJiYgdG9rZW5NYXRjaC50YXJnZXRNYXRjaEluZGV4ID09PSBwb3MgJiYgMSA8IHRva2VuTWF0Y2gudGFyZ2V0TWF0Y2hbMF0ubGVuZ3RoICYmIHZvaWQgMCAhPT0gZm9ybWF0Q29kZVt0b2tlbk1hdGNoLnRhcmdldE1hdGNoWzBdXSAmJiAodmFsaWRhdG9yID0gZm9ybWF0Q29kZVt0b2tlbk1hdGNoLnRhcmdldE1hdGNoWzBdXVswXSwgXG4gICAgICAgICAgICAgICAgICAgIG5ldyBSZWdFeHAodmFsaWRhdG9yKS50ZXN0KFwiMFwiICsgYykpID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0OiBbIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3M6IHBvcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBcIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvczogcG9zICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBjXG4gICAgICAgICAgICAgICAgICAgICAgICB9IF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3M6IHBvcyArIDFcbiAgICAgICAgICAgICAgICAgICAgfSA6IGN1cnJlbnRSZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UmVzdWx0LmZ1enp5ICYmIChidWZmZXIgPSBjdXJyZW50UmVzdWx0LmJ1ZmZlciwgcG9zID0gY3VycmVudFJlc3VsdC5wb3MpLCBcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5NYXRjaCA9IGdldFRva2VuTWF0Y2gocG9zLCBvcHRzKSwgdG9rZW5NYXRjaC50YXJnZXRNYXRjaCAmJiB0b2tlbk1hdGNoLnRhcmdldE1hdGNoWzBdICYmIHZvaWQgMCAhPT0gZm9ybWF0Q29kZVt0b2tlbk1hdGNoLnRhcmdldE1hdGNoWzBdXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yID0gZm9ybWF0Q29kZVt0b2tlbk1hdGNoLnRhcmdldE1hdGNoWzBdXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJ0ID0gYnVmZmVyLnNsaWNlKHRva2VuTWF0Y2gudGFyZ2V0TWF0Y2hJbmRleCwgdG9rZW5NYXRjaC50YXJnZXRNYXRjaEluZGV4ICsgdG9rZW5NYXRjaC50YXJnZXRNYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgITEgPT09IG5ldyBSZWdFeHAodmFsaWRhdG9yKS50ZXN0KHBhcnQuam9pbihcIlwiKSkgJiYgMiA9PT0gdG9rZW5NYXRjaC50YXJnZXRNYXRjaFswXS5sZW5ndGggJiYgbWFza3NldC52YWxpZFBvc2l0aW9uc1t0b2tlbk1hdGNoLnRhcmdldE1hdGNoSW5kZXhdICYmIG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbdG9rZW5NYXRjaC50YXJnZXRNYXRjaEluZGV4ICsgMV0gJiYgKG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbdG9rZW5NYXRjaC50YXJnZXRNYXRjaEluZGV4ICsgMV0uaW5wdXQgPSBcIjBcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGN1cnJlbnRSZXN1bHQsIGRhdGVQYXJ0cyA9IGFuYWx5c2VNYXNrKGJ1ZmZlci5qb2luKFwiXCIpLCBvcHRzLmlucHV0Rm9ybWF0LCBvcHRzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiBkYXRlUGFydHMuZGF0ZS5nZXRUaW1lKCkgPT0gZGF0ZVBhcnRzLmRhdGUuZ2V0VGltZSgpICYmIChyZXN1bHQgPSBpc1ZhbGlkRGF0ZShkYXRlUGFydHMsIHJlc3VsdCksIFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgaXNEYXRlSW5SYW5nZShkYXRlUGFydHMsIG9wdHMpKSwgcG9zICYmIHJlc3VsdCAmJiBjdXJyZW50UmVzdWx0LnBvcyAhPT0gcG9zID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyOiBwYXJzZShvcHRzLmlucHV0Rm9ybWF0LCBkYXRlUGFydHMsIG9wdHMpLnNwbGl0KFwiXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaEZyb21CdWZmZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogcG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogY3VycmVudFJlc3VsdC5wb3NcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSA6IHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uS2V5RG93bjogZnVuY3Rpb24gb25LZXlEb3duKGUsIGJ1ZmZlciwgY2FyZXRQb3MsIG9wdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgZS5jdHJsS2V5ICYmIGUua2V5Q29kZSA9PT0ga2V5Q29kZS5SSUdIVCAmJiAodGhpcy5pbnB1dG1hc2suX3ZhbHVlU2V0KGltcG9ydERhdGUobmV3IERhdGUoKSwgb3B0cykpLCBcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS50cmlnZ2VyKFwic2V0dmFsdWVcIikpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25Vbk1hc2s6IGZ1bmN0aW9uIG9uVW5NYXNrKG1hc2tlZFZhbHVlLCB1bm1hc2tlZFZhbHVlLCBvcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bm1hc2tlZFZhbHVlID8gcGFyc2Uob3B0cy5vdXRwdXRGb3JtYXQsIGFuYWx5c2VNYXNrKG1hc2tlZFZhbHVlLCBvcHRzLmlucHV0Rm9ybWF0LCBvcHRzKSwgb3B0cywgITApIDogdW5tYXNrZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhc2luZzogZnVuY3Rpb24gY2FzaW5nKGVsZW0sIHRlc3QsIHBvcywgdmFsaWRQb3NpdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAgPT0gdGVzdC5uYXRpdmVEZWYuaW5kZXhPZihcIlthcF1cIikgPyBlbGVtLnRvTG93ZXJDYXNlKCkgOiAwID09IHRlc3QubmF0aXZlRGVmLmluZGV4T2YoXCJbQVBdXCIpID8gZWxlbS50b1VwcGVyQ2FzZSgpIDogZWxlbTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uQmVmb3JlTWFzazogZnVuY3Rpb24gb25CZWZvcmVNYXNrKGluaXRpYWxWYWx1ZSwgb3B0cykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJbb2JqZWN0IERhdGVdXCIgPT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbml0aWFsVmFsdWUpICYmIChpbml0aWFsVmFsdWUgPSBpbXBvcnREYXRlKGluaXRpYWxWYWx1ZSwgb3B0cykpLCBcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaW5zZXJ0TW9kZTogITEsXG4gICAgICAgICAgICAgICAgc2hpZnRQb3NpdGlvbnM6ICExLFxuICAgICAgICAgICAgICAgIGtlZXBTdGF0aWM6ICExLFxuICAgICAgICAgICAgICAgIGlucHV0bW9kZTogXCJudW1lcmljXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksIG1vZHVsZS5leHBvcnRzID0gSW5wdXRtYXNrO1xuICAgIH0sIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgdmFyIElucHV0bWFzayA9IF9fd2VicGFja19yZXF1aXJlX18oMSksICQgPSBJbnB1dG1hc2suZGVwZW5kZW5jeUxpYiwga2V5Q29kZSA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4gICAgICAgIGZ1bmN0aW9uIGF1dG9Fc2NhcGUodHh0LCBvcHRzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBlc2NhcGVkVHh0ID0gXCJcIiwgaSA9IDA7IGkgPCB0eHQubGVuZ3RoOyBpKyspIElucHV0bWFzay5wcm90b3R5cGUuZGVmaW5pdGlvbnNbdHh0LmNoYXJBdChpKV0gfHwgb3B0cy5kZWZpbml0aW9uc1t0eHQuY2hhckF0KGkpXSB8fCBvcHRzLm9wdGlvbmFsbWFya2VyWzBdID09PSB0eHQuY2hhckF0KGkpIHx8IG9wdHMub3B0aW9uYWxtYXJrZXJbMV0gPT09IHR4dC5jaGFyQXQoaSkgfHwgb3B0cy5xdWFudGlmaWVybWFya2VyWzBdID09PSB0eHQuY2hhckF0KGkpIHx8IG9wdHMucXVhbnRpZmllcm1hcmtlclsxXSA9PT0gdHh0LmNoYXJBdChpKSB8fCBvcHRzLmdyb3VwbWFya2VyWzBdID09PSB0eHQuY2hhckF0KGkpIHx8IG9wdHMuZ3JvdXBtYXJrZXJbMV0gPT09IHR4dC5jaGFyQXQoaSkgfHwgb3B0cy5hbHRlcm5hdG9ybWFya2VyID09PSB0eHQuY2hhckF0KGkpID8gZXNjYXBlZFR4dCArPSBcIlxcXFxcIiArIHR4dC5jaGFyQXQoaSkgOiBlc2NhcGVkVHh0ICs9IHR4dC5jaGFyQXQoaSk7XG4gICAgICAgICAgICByZXR1cm4gZXNjYXBlZFR4dDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhbGlnbkRpZ2l0cyhidWZmZXIsIGRpZ2l0cywgb3B0cywgZm9yY2UpIHtcbiAgICAgICAgICAgIGlmICgwIDwgYnVmZmVyLmxlbmd0aCAmJiAwIDwgZGlnaXRzICYmICghb3B0cy5kaWdpdHNPcHRpb25hbCB8fCBmb3JjZSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmFkaXhQb3NpdGlvbiA9ICQuaW5BcnJheShvcHRzLnJhZGl4UG9pbnQsIGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgLTEgPT09IHJhZGl4UG9zaXRpb24gJiYgKGJ1ZmZlci5wdXNoKG9wdHMucmFkaXhQb2ludCksIHJhZGl4UG9zaXRpb24gPSBidWZmZXIubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gZGlnaXRzOyBpKyspIGlzRmluaXRlKGJ1ZmZlcltyYWRpeFBvc2l0aW9uICsgaV0pIHx8IChidWZmZXJbcmFkaXhQb3NpdGlvbiArIGldID0gXCIwXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBmaW5kVmFsaWRhdG9yKHN5bWJvbCwgbWFza3NldCkge1xuICAgICAgICAgICAgdmFyIHBvc05keCA9IDA7XG4gICAgICAgICAgICBpZiAoXCIrXCIgPT09IHN5bWJvbCkge1xuICAgICAgICAgICAgICAgIGZvciAocG9zTmR4IGluIG1hc2tzZXQudmFsaWRQb3NpdGlvbnMpIDtcbiAgICAgICAgICAgICAgICBwb3NOZHggPSBwYXJzZUludChwb3NOZHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgdHN0TmR4IGluIG1hc2tzZXQudGVzdHMpIGlmICh0c3ROZHggPSBwYXJzZUludCh0c3ROZHgpLCBwb3NOZHggPD0gdHN0TmR4KSBmb3IgKHZhciBuZHggPSAwLCBuZHhsID0gbWFza3NldC50ZXN0c1t0c3ROZHhdLmxlbmd0aDsgbmR4IDwgbmR4bDsgbmR4KyspIGlmICgodm9pZCAwID09PSBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW3RzdE5keF0gfHwgXCItXCIgPT09IHN5bWJvbCkgJiYgbWFza3NldC50ZXN0c1t0c3ROZHhdW25keF0ubWF0Y2guZGVmID09PSBzeW1ib2wpIHJldHVybiB0c3ROZHggKyAodm9pZCAwICE9PSBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW3RzdE5keF0gJiYgXCItXCIgIT09IHN5bWJvbCA/IDEgOiAwKTtcbiAgICAgICAgICAgIHJldHVybiBwb3NOZHg7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZmluZFZhbGlkKHN5bWJvbCwgbWFza3NldCkge1xuICAgICAgICAgICAgdmFyIHJldCA9IC0xO1xuICAgICAgICAgICAgcmV0dXJuICQuZWFjaChtYXNrc2V0LnZhbGlkUG9zaXRpb25zLCBmdW5jdGlvbihuZHgsIHRzdCkge1xuICAgICAgICAgICAgICAgIGlmICh0c3QgJiYgdHN0Lm1hdGNoLmRlZiA9PT0gc3ltYm9sKSByZXR1cm4gcmV0ID0gcGFyc2VJbnQobmR4KSwgITE7XG4gICAgICAgICAgICB9KSwgcmV0O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlTWluTWF4T3B0aW9ucyhvcHRzKSB7XG4gICAgICAgICAgICB2b2lkIDAgPT09IG9wdHMucGFyc2VNaW5NYXhPcHRpb25zICYmIChudWxsICE9PSBvcHRzLm1pbiAmJiAob3B0cy5taW4gPSBvcHRzLm1pbi50b1N0cmluZygpLnJlcGxhY2UobmV3IFJlZ0V4cChJbnB1dG1hc2suZXNjYXBlUmVnZXgob3B0cy5ncm91cFNlcGFyYXRvciksIFwiZ1wiKSwgXCJcIiksIFxuICAgICAgICAgICAgXCIsXCIgPT09IG9wdHMucmFkaXhQb2ludCAmJiAob3B0cy5taW4gPSBvcHRzLm1pbi5yZXBsYWNlKG9wdHMucmFkaXhQb2ludCwgXCIuXCIpKSwgXG4gICAgICAgICAgICBvcHRzLm1pbiA9IGlzRmluaXRlKG9wdHMubWluKSA/IHBhcnNlRmxvYXQob3B0cy5taW4pIDogTmFOLCBpc05hTihvcHRzLm1pbikgJiYgKG9wdHMubWluID0gTnVtYmVyLk1JTl9WQUxVRSkpLCBcbiAgICAgICAgICAgIG51bGwgIT09IG9wdHMubWF4ICYmIChvcHRzLm1heCA9IG9wdHMubWF4LnRvU3RyaW5nKCkucmVwbGFjZShuZXcgUmVnRXhwKElucHV0bWFzay5lc2NhcGVSZWdleChvcHRzLmdyb3VwU2VwYXJhdG9yKSwgXCJnXCIpLCBcIlwiKSwgXG4gICAgICAgICAgICBcIixcIiA9PT0gb3B0cy5yYWRpeFBvaW50ICYmIChvcHRzLm1heCA9IG9wdHMubWF4LnJlcGxhY2Uob3B0cy5yYWRpeFBvaW50LCBcIi5cIikpLCBcbiAgICAgICAgICAgIG9wdHMubWF4ID0gaXNGaW5pdGUob3B0cy5tYXgpID8gcGFyc2VGbG9hdChvcHRzLm1heCkgOiBOYU4sIGlzTmFOKG9wdHMubWF4KSAmJiAob3B0cy5tYXggPSBOdW1iZXIuTUFYX1ZBTFVFKSksIFxuICAgICAgICAgICAgb3B0cy5wYXJzZU1pbk1heE9wdGlvbnMgPSBcImRvbmVcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2VuTWFzayhvcHRzKSB7XG4gICAgICAgICAgICBvcHRzLnJlcGVhdCA9IDAsIG9wdHMuZ3JvdXBTZXBhcmF0b3IgPT09IG9wdHMucmFkaXhQb2ludCAmJiBvcHRzLmRpZ2l0cyAmJiBcIjBcIiAhPT0gb3B0cy5kaWdpdHMgJiYgKFwiLlwiID09PSBvcHRzLnJhZGl4UG9pbnQgPyBvcHRzLmdyb3VwU2VwYXJhdG9yID0gXCIsXCIgOiBcIixcIiA9PT0gb3B0cy5yYWRpeFBvaW50ID8gb3B0cy5ncm91cFNlcGFyYXRvciA9IFwiLlwiIDogb3B0cy5ncm91cFNlcGFyYXRvciA9IFwiXCIpLCBcbiAgICAgICAgICAgIFwiIFwiID09PSBvcHRzLmdyb3VwU2VwYXJhdG9yICYmIChvcHRzLnNraXBPcHRpb25hbFBhcnRDaGFyYWN0ZXIgPSB2b2lkIDApLCAxIDwgb3B0cy5wbGFjZWhvbGRlci5sZW5ndGggJiYgKG9wdHMucGxhY2Vob2xkZXIgPSBvcHRzLnBsYWNlaG9sZGVyLmNoYXJBdCgwKSksIFxuICAgICAgICAgICAgXCJyYWRpeEZvY3VzXCIgPT09IG9wdHMucG9zaXRpb25DYXJldE9uQ2xpY2sgJiYgXCJcIiA9PT0gb3B0cy5wbGFjZWhvbGRlciAmJiAob3B0cy5wb3NpdGlvbkNhcmV0T25DbGljayA9IFwibHZwXCIpO1xuICAgICAgICAgICAgdmFyIGRlY2ltYWxEZWYgPSBcIjBcIiwgcmFkaXhQb2ludERlZiA9IG9wdHMucmFkaXhQb2ludDtcbiAgICAgICAgICAgICEwID09PSBvcHRzLm51bWVyaWNJbnB1dCAmJiB2b2lkIDAgPT09IG9wdHMuX19maW5hbmNlSW5wdXQgPyAoZGVjaW1hbERlZiA9IFwiMVwiLCBcbiAgICAgICAgICAgIG9wdHMucG9zaXRpb25DYXJldE9uQ2xpY2sgPSBcInJhZGl4Rm9jdXNcIiA9PT0gb3B0cy5wb3NpdGlvbkNhcmV0T25DbGljayA/IFwibHZwXCIgOiBvcHRzLnBvc2l0aW9uQ2FyZXRPbkNsaWNrLCBcbiAgICAgICAgICAgIG9wdHMuZGlnaXRzT3B0aW9uYWwgPSAhMSwgaXNOYU4ob3B0cy5kaWdpdHMpICYmIChvcHRzLmRpZ2l0cyA9IDIpLCBvcHRzLl9yYWRpeERhbmNlID0gITEsIFxuICAgICAgICAgICAgcmFkaXhQb2ludERlZiA9IFwiLFwiID09PSBvcHRzLnJhZGl4UG9pbnQgPyBcIj9cIiA6IFwiIVwiLCBcIlwiICE9PSBvcHRzLnJhZGl4UG9pbnQgJiYgdm9pZCAwID09PSBvcHRzLmRlZmluaXRpb25zW3JhZGl4UG9pbnREZWZdICYmIChvcHRzLmRlZmluaXRpb25zW3JhZGl4UG9pbnREZWZdID0ge30sIFxuICAgICAgICAgICAgb3B0cy5kZWZpbml0aW9uc1tyYWRpeFBvaW50RGVmXS52YWxpZGF0b3IgPSBcIltcIiArIG9wdHMucmFkaXhQb2ludCArIFwiXVwiLCBvcHRzLmRlZmluaXRpb25zW3JhZGl4UG9pbnREZWZdLnBsYWNlaG9sZGVyID0gb3B0cy5yYWRpeFBvaW50LCBcbiAgICAgICAgICAgIG9wdHMuZGVmaW5pdGlvbnNbcmFkaXhQb2ludERlZl0uc3RhdGljID0gITAsIG9wdHMuZGVmaW5pdGlvbnNbcmFkaXhQb2ludERlZl0uZ2VuZXJhdGVkID0gITApKSA6IChvcHRzLl9fZmluYW5jZUlucHV0ID0gITEsIFxuICAgICAgICAgICAgb3B0cy5udW1lcmljSW5wdXQgPSAhMCk7XG4gICAgICAgICAgICB2YXIgbWFzayA9IFwiWytdXCIsIGFsdE1hc2s7XG4gICAgICAgICAgICBpZiAobWFzayArPSBhdXRvRXNjYXBlKG9wdHMucHJlZml4LCBvcHRzKSwgXCJcIiAhPT0gb3B0cy5ncm91cFNlcGFyYXRvciA/ICh2b2lkIDAgPT09IG9wdHMuZGVmaW5pdGlvbnNbb3B0cy5ncm91cFNlcGFyYXRvcl0gJiYgKG9wdHMuZGVmaW5pdGlvbnNbb3B0cy5ncm91cFNlcGFyYXRvcl0gPSB7fSwgXG4gICAgICAgICAgICBvcHRzLmRlZmluaXRpb25zW29wdHMuZ3JvdXBTZXBhcmF0b3JdLnZhbGlkYXRvciA9IFwiW1wiICsgb3B0cy5ncm91cFNlcGFyYXRvciArIFwiXVwiLCBcbiAgICAgICAgICAgIG9wdHMuZGVmaW5pdGlvbnNbb3B0cy5ncm91cFNlcGFyYXRvcl0ucGxhY2Vob2xkZXIgPSBvcHRzLmdyb3VwU2VwYXJhdG9yLCBvcHRzLmRlZmluaXRpb25zW29wdHMuZ3JvdXBTZXBhcmF0b3JdLnN0YXRpYyA9ICEwLCBcbiAgICAgICAgICAgIG9wdHMuZGVmaW5pdGlvbnNbb3B0cy5ncm91cFNlcGFyYXRvcl0uZ2VuZXJhdGVkID0gITApLCBtYXNrICs9IG9wdHMuX21hc2sob3B0cykpIDogbWFzayArPSBcIjl7K31cIiwgXG4gICAgICAgICAgICB2b2lkIDAgIT09IG9wdHMuZGlnaXRzICYmIDAgIT09IG9wdHMuZGlnaXRzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRxID0gb3B0cy5kaWdpdHMudG9TdHJpbmcoKS5zcGxpdChcIixcIik7XG4gICAgICAgICAgICAgICAgaXNGaW5pdGUoZHFbMF0pICYmIGRxWzFdICYmIGlzRmluaXRlKGRxWzFdKSA/IG1hc2sgKz0gcmFkaXhQb2ludERlZiArIGRlY2ltYWxEZWYgKyBcIntcIiArIG9wdHMuZGlnaXRzICsgXCJ9XCIgOiAoaXNOYU4ob3B0cy5kaWdpdHMpIHx8IDAgPCBwYXJzZUludChvcHRzLmRpZ2l0cykpICYmIChvcHRzLmRpZ2l0c09wdGlvbmFsID8gKGFsdE1hc2sgPSBtYXNrICsgcmFkaXhQb2ludERlZiArIGRlY2ltYWxEZWYgKyBcInswLFwiICsgb3B0cy5kaWdpdHMgKyBcIn1cIiwgXG4gICAgICAgICAgICAgICAgb3B0cy5rZWVwU3RhdGljID0gITApIDogbWFzayArPSByYWRpeFBvaW50RGVmICsgZGVjaW1hbERlZiArIFwie1wiICsgb3B0cy5kaWdpdHMgKyBcIn1cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWFzayArPSBhdXRvRXNjYXBlKG9wdHMuc3VmZml4LCBvcHRzKSwgbWFzayArPSBcIlstXVwiLCBhbHRNYXNrICYmIChtYXNrID0gWyBhbHRNYXNrICsgYXV0b0VzY2FwZShvcHRzLnN1ZmZpeCwgb3B0cykgKyBcIlstXVwiLCBtYXNrIF0pLCBcbiAgICAgICAgICAgIG9wdHMuZ3JlZWR5ID0gITEsIHBhcnNlTWluTWF4T3B0aW9ucyhvcHRzKSwgbWFzaztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYW5uZGxlUmFkaXhEYW5jZShwb3MsIGMsIHJhZGl4UG9zLCBtYXNrc2V0LCBvcHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0cy5fcmFkaXhEYW5jZSAmJiBvcHRzLm51bWVyaWNJbnB1dCAmJiBjICE9PSBvcHRzLm5lZ2F0aW9uU3ltYm9sLmJhY2sgJiYgcG9zIDw9IHJhZGl4UG9zICYmICgwIDwgcmFkaXhQb3MgfHwgYyA9PSBvcHRzLnJhZGl4UG9pbnQpICYmICh2b2lkIDAgPT09IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcG9zIC0gMV0gfHwgbWFza3NldC52YWxpZFBvc2l0aW9uc1twb3MgLSAxXS5pbnB1dCAhPT0gb3B0cy5uZWdhdGlvblN5bWJvbC5iYWNrKSAmJiAocG9zIC09IDEpLCBcbiAgICAgICAgICAgIHBvcztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBkZWNpbWFsVmFsaWRhdG9yKGNocnMsIG1hc2tzZXQsIHBvcywgc3RyaWN0LCBvcHRzKSB7XG4gICAgICAgICAgICB2YXIgcmFkaXhQb3MgPSBtYXNrc2V0LmJ1ZmZlciA/IG1hc2tzZXQuYnVmZmVyLmluZGV4T2Yob3B0cy5yYWRpeFBvaW50KSA6IC0xLCByZXN1bHQgPSAtMSAhPT0gcmFkaXhQb3MgJiYgbmV3IFJlZ0V4cChcIlswLTlcXHVmZjExLVxcdWZmMTldXCIpLnRlc3QoY2hycyk7XG4gICAgICAgICAgICByZXR1cm4gb3B0cy5fcmFkaXhEYW5jZSAmJiByZXN1bHQgJiYgbnVsbCA9PSBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW3JhZGl4UG9zXSA/IHtcbiAgICAgICAgICAgICAgICBpbnNlcnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgcG9zOiByYWRpeFBvcyA9PT0gcG9zID8gcmFkaXhQb3MgKyAxIDogcmFkaXhQb3MsXG4gICAgICAgICAgICAgICAgICAgIGM6IG9wdHMucmFkaXhQb2ludFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcG9zOiBwb3NcbiAgICAgICAgICAgIH0gOiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hlY2tGb3JMZWFkaW5nWmVyb2VzKGJ1ZmZlciwgb3B0cykge1xuICAgICAgICAgICAgdmFyIG51bWJlck1hdGNoZXMgPSBuZXcgUmVnRXhwKFwiKF5cIiArIChcIlwiICE9PSBvcHRzLm5lZ2F0aW9uU3ltYm9sLmZyb250ID8gSW5wdXRtYXNrLmVzY2FwZVJlZ2V4KG9wdHMubmVnYXRpb25TeW1ib2wuZnJvbnQpICsgXCI/XCIgOiBcIlwiKSArIElucHV0bWFzay5lc2NhcGVSZWdleChvcHRzLnByZWZpeCkgKyBcIikoLiopKFwiICsgSW5wdXRtYXNrLmVzY2FwZVJlZ2V4KG9wdHMuc3VmZml4KSArIChcIlwiICE9IG9wdHMubmVnYXRpb25TeW1ib2wuYmFjayA/IElucHV0bWFzay5lc2NhcGVSZWdleChvcHRzLm5lZ2F0aW9uU3ltYm9sLmJhY2spICsgXCI/XCIgOiBcIlwiKSArIFwiJClcIikuZXhlYyhidWZmZXIuc2xpY2UoKS5yZXZlcnNlKCkuam9pbihcIlwiKSksIG51bWJlciA9IG51bWJlck1hdGNoZXMgPyBudW1iZXJNYXRjaGVzWzJdIDogXCJcIiwgbGVhZGluZ3plcm9lcyA9ICExO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciAmJiAobnVtYmVyID0gbnVtYmVyLnNwbGl0KG9wdHMucmFkaXhQb2ludC5jaGFyQXQoMCkpWzBdLCBsZWFkaW5nemVyb2VzID0gbmV3IFJlZ0V4cChcIl5bMFwiICsgb3B0cy5ncm91cFNlcGFyYXRvciArIFwiXSpcIikuZXhlYyhudW1iZXIpKSwgXG4gICAgICAgICAgICAhKCFsZWFkaW5nemVyb2VzIHx8ICEoMSA8IGxlYWRpbmd6ZXJvZXNbMF0ubGVuZ3RoIHx8IDAgPCBsZWFkaW5nemVyb2VzWzBdLmxlbmd0aCAmJiBsZWFkaW5nemVyb2VzWzBdLmxlbmd0aCA8IG51bWJlci5sZW5ndGgpKSAmJiBsZWFkaW5nemVyb2VzO1xuICAgICAgICB9XG4gICAgICAgIElucHV0bWFzay5leHRlbmRBbGlhc2VzKHtcbiAgICAgICAgICAgIG51bWVyaWM6IHtcbiAgICAgICAgICAgICAgICBtYXNrOiBnZW5NYXNrLFxuICAgICAgICAgICAgICAgIF9tYXNrOiBmdW5jdGlvbiBfbWFzayhvcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIihcIiArIG9wdHMuZ3JvdXBTZXBhcmF0b3IgKyBcIjk5OSl7K3wxfVwiO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGlnaXRzOiBcIipcIixcbiAgICAgICAgICAgICAgICBkaWdpdHNPcHRpb25hbDogITAsXG4gICAgICAgICAgICAgICAgZW5mb3JjZURpZ2l0c09uQmx1cjogITEsXG4gICAgICAgICAgICAgICAgcmFkaXhQb2ludDogXCIuXCIsXG4gICAgICAgICAgICAgICAgcG9zaXRpb25DYXJldE9uQ2xpY2s6IFwicmFkaXhGb2N1c1wiLFxuICAgICAgICAgICAgICAgIF9yYWRpeERhbmNlOiAhMCxcbiAgICAgICAgICAgICAgICBncm91cFNlcGFyYXRvcjogXCJcIixcbiAgICAgICAgICAgICAgICBhbGxvd01pbnVzOiAhMCxcbiAgICAgICAgICAgICAgICBuZWdhdGlvblN5bWJvbDoge1xuICAgICAgICAgICAgICAgICAgICBmcm9udDogXCItXCIsXG4gICAgICAgICAgICAgICAgICAgIGJhY2s6IFwiXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHByZWZpeDogXCJcIixcbiAgICAgICAgICAgICAgICBzdWZmaXg6IFwiXCIsXG4gICAgICAgICAgICAgICAgbWluOiBudWxsLFxuICAgICAgICAgICAgICAgIG1heDogbnVsbCxcbiAgICAgICAgICAgICAgICBzdGVwOiAxLFxuICAgICAgICAgICAgICAgIHVubWFza0FzTnVtYmVyOiAhMSxcbiAgICAgICAgICAgICAgICByb3VuZGluZ0ZOOiBNYXRoLnJvdW5kLFxuICAgICAgICAgICAgICAgIGlucHV0bW9kZTogXCJudW1lcmljXCIsXG4gICAgICAgICAgICAgICAgc2hvcnRjdXRzOiB7XG4gICAgICAgICAgICAgICAgICAgIGs6IFwiMDAwXCIsXG4gICAgICAgICAgICAgICAgICAgIG06IFwiMDAwMDAwXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIjBcIixcbiAgICAgICAgICAgICAgICBncmVlZHk6ICExLFxuICAgICAgICAgICAgICAgIHJpZ2h0QWxpZ246ICEwLFxuICAgICAgICAgICAgICAgIGluc2VydE1vZGU6ICEwLFxuICAgICAgICAgICAgICAgIGF1dG9Vbm1hc2s6ICExLFxuICAgICAgICAgICAgICAgIHNraXBPcHRpb25hbFBhcnRDaGFyYWN0ZXI6IFwiXCIsXG4gICAgICAgICAgICAgICAgZGVmaW5pdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgMDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBkZWNpbWFsVmFsaWRhdG9yXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcjogZGVjaW1hbFZhbGlkYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25TeW1ib2w6IFwiOVwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiK1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcihjaHJzLCBtYXNrc2V0LCBwb3MsIHN0cmljdCwgb3B0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRzLmFsbG93TWludXMgJiYgKFwiLVwiID09PSBjaHJzIHx8IGNocnMgPT09IG9wdHMubmVnYXRpb25TeW1ib2wuZnJvbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIi1cIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IoY2hycywgbWFza3NldCwgcG9zLCBzdHJpY3QsIG9wdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0cy5hbGxvd01pbnVzICYmIGNocnMgPT09IG9wdHMubmVnYXRpb25TeW1ib2wuYmFjaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcHJlVmFsaWRhdGlvbjogZnVuY3Rpb24gcHJlVmFsaWRhdGlvbihidWZmZXIsIHBvcywgYywgaXNTZWxlY3Rpb24sIG9wdHMsIG1hc2tzZXQsIGNhcmV0UG9zLCBzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCExICE9PSBvcHRzLl9fZmluYW5jZUlucHV0ICYmIGMgPT09IG9wdHMucmFkaXhQb2ludCkgcmV0dXJuICExO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGF0dGVybjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhdHRlcm4gPSBvcHRzLnNob3J0Y3V0cyAmJiBvcHRzLnNob3J0Y3V0c1tjXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDEgPCBwYXR0ZXJuLmxlbmd0aCkgZm9yICh2YXIgaW5zZXJ0cyA9IFtdLCBpID0gMDsgaSA8IHBhdHRlcm4ubGVuZ3RoOyBpKyspIGluc2VydHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zOiBwb3MgKyBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IHBhdHRlcm5baV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWN0OiAhMVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydDogaW5zZXJ0c1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgcmFkaXhQb3MgPSAkLmluQXJyYXkob3B0cy5yYWRpeFBvaW50LCBidWZmZXIpLCBpbml0UG9zID0gcG9zO1xuICAgICAgICAgICAgICAgICAgICBpZiAocG9zID0gaGFubmRsZVJhZGl4RGFuY2UocG9zLCBjLCByYWRpeFBvcywgbWFza3NldCwgb3B0cyksIFwiLVwiID09PSBjIHx8IGMgPT09IG9wdHMubmVnYXRpb25TeW1ib2wuZnJvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghMCAhPT0gb3B0cy5hbGxvd01pbnVzKSByZXR1cm4gITE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNOZWdhdGl2ZSA9ICExLCBmcm9udCA9IGZpbmRWYWxpZChcIitcIiwgbWFza3NldCksIGJhY2sgPSBmaW5kVmFsaWQoXCItXCIsIG1hc2tzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xICE9PSBmcm9udCAmJiAoaXNOZWdhdGl2ZSA9IFsgZnJvbnQsIGJhY2sgXSksICExICE9PSBpc05lZ2F0aXZlID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZTogaXNOZWdhdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJldDogaW5pdFBvc1xuICAgICAgICAgICAgICAgICAgICAgICAgfSA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnQ6IFsge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3M6IGZpbmRWYWxpZGF0b3IoXCIrXCIsIG1hc2tzZXQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBvcHRzLm5lZ2F0aW9uU3ltYm9sLmZyb250LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tSXNWYWxpZDogITBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvczogZmluZFZhbGlkYXRvcihcIi1cIiwgbWFza3NldCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IG9wdHMubmVnYXRpb25TeW1ib2wuYmFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUlzVmFsaWQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJldDogaW5pdFBvcyArIG9wdHMubmVnYXRpb25TeW1ib2wuYmFjay5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmljdCkgcmV0dXJuICEwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoLTEgIT09IHJhZGl4UG9zICYmICEwID09PSBvcHRzLl9yYWRpeERhbmNlICYmICExID09PSBpc1NlbGVjdGlvbiAmJiBjID09PSBvcHRzLnJhZGl4UG9pbnQgJiYgdm9pZCAwICE9PSBvcHRzLmRpZ2l0cyAmJiAoaXNOYU4ob3B0cy5kaWdpdHMpIHx8IDAgPCBwYXJzZUludChvcHRzLmRpZ2l0cykpICYmIHJhZGl4UG9zICE9PSBwb3MpIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJldDogb3B0cy5fcmFkaXhEYW5jZSAmJiBwb3MgPT09IHJhZGl4UG9zIC0gMSA/IHJhZGl4UG9zICsgMSA6IHJhZGl4UG9zXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGlmICghMSA9PT0gb3B0cy5fX2ZpbmFuY2VJbnB1dCkgaWYgKGlzU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5kaWdpdHNPcHRpb25hbCkgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXdyaXRlUG9zaXRpb246IGNhcmV0UG9zLmVuZFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0cy5kaWdpdHNPcHRpb25hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXJldFBvcy5iZWdpbiA+IHJhZGl4UG9zICYmIGNhcmV0UG9zLmVuZCA8PSByYWRpeFBvcykgcmV0dXJuIGMgPT09IG9wdHMucmFkaXhQb2ludCA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3M6IHJhZGl4UG9zICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUlzVmFsaWQ6ICEwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJld3JpdGVQb3NpdGlvbjogcmFkaXhQb3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXdyaXRlUG9zaXRpb246IHJhZGl4UG9zICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhcmV0UG9zLmJlZ2luIDwgcmFkaXhQb3MpIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJld3JpdGVQb3NpdGlvbjogY2FyZXRQb3MuYmVnaW4gLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghb3B0cy5zaG93TWFza09uSG92ZXIgJiYgIW9wdHMuc2hvd01hc2tPbkZvY3VzICYmICFvcHRzLmRpZ2l0c09wdGlvbmFsICYmIDAgPCBvcHRzLmRpZ2l0cyAmJiBcIlwiID09PSB0aGlzLmlucHV0bWFzay5fX3ZhbHVlR2V0LmNhbGwodGhpcykpIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXdyaXRlUG9zaXRpb246IHJhZGl4UG9zXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXdyaXRlUG9zaXRpb246IHBvc1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcG9zdFZhbGlkYXRpb246IGZ1bmN0aW9uIHBvc3RWYWxpZGF0aW9uKGJ1ZmZlciwgcG9zLCBjLCBjdXJyZW50UmVzdWx0LCBvcHRzLCBtYXNrc2V0LCBzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCExID09PSBjdXJyZW50UmVzdWx0KSByZXR1cm4gY3VycmVudFJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmljdCkgcmV0dXJuICEwO1xuICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gb3B0cy5taW4gfHwgbnVsbCAhPT0gb3B0cy5tYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bm1hc2tlZCA9IG9wdHMub25Vbk1hc2soYnVmZmVyLnNsaWNlKCkucmV2ZXJzZSgpLmpvaW4oXCJcIiksIHZvaWQgMCwgJC5leHRlbmQoe30sIG9wdHMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm1hc2tBc051bWJlcjogITBcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsICE9PSBvcHRzLm1pbiAmJiB1bm1hc2tlZCA8IG9wdHMubWluICYmICh1bm1hc2tlZC50b1N0cmluZygpLmxlbmd0aCA+PSBvcHRzLm1pbi50b1N0cmluZygpLmxlbmd0aCB8fCB1bm1hc2tlZCA8IDApKSByZXR1cm4gITE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gb3B0cy5tYXggJiYgdW5tYXNrZWQgPiBvcHRzLm1heCkgcmV0dXJuICExO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UmVzdWx0O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25Vbk1hc2s6IGZ1bmN0aW9uIG9uVW5NYXNrKG1hc2tlZFZhbHVlLCB1bm1hc2tlZFZhbHVlLCBvcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcIlwiID09PSB1bm1hc2tlZFZhbHVlICYmICEwID09PSBvcHRzLm51bGxhYmxlKSByZXR1cm4gdW5tYXNrZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByb2Nlc3NWYWx1ZSA9IG1hc2tlZFZhbHVlLnJlcGxhY2Uob3B0cy5wcmVmaXgsIFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc1ZhbHVlID0gcHJvY2Vzc1ZhbHVlLnJlcGxhY2Uob3B0cy5zdWZmaXgsIFwiXCIpLCBwcm9jZXNzVmFsdWUgPSBwcm9jZXNzVmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKElucHV0bWFzay5lc2NhcGVSZWdleChvcHRzLmdyb3VwU2VwYXJhdG9yKSwgXCJnXCIpLCBcIlwiKSwgXG4gICAgICAgICAgICAgICAgICAgIFwiXCIgIT09IG9wdHMucGxhY2Vob2xkZXIuY2hhckF0KDApICYmIChwcm9jZXNzVmFsdWUgPSBwcm9jZXNzVmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKG9wdHMucGxhY2Vob2xkZXIuY2hhckF0KDApLCBcImdcIiksIFwiMFwiKSksIFxuICAgICAgICAgICAgICAgICAgICBvcHRzLnVubWFza0FzTnVtYmVyID8gKFwiXCIgIT09IG9wdHMucmFkaXhQb2ludCAmJiAtMSAhPT0gcHJvY2Vzc1ZhbHVlLmluZGV4T2Yob3B0cy5yYWRpeFBvaW50KSAmJiAocHJvY2Vzc1ZhbHVlID0gcHJvY2Vzc1ZhbHVlLnJlcGxhY2UoSW5wdXRtYXNrLmVzY2FwZVJlZ2V4LmNhbGwodGhpcywgb3B0cy5yYWRpeFBvaW50KSwgXCIuXCIpKSwgXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NWYWx1ZSA9IHByb2Nlc3NWYWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoXCJeXCIgKyBJbnB1dG1hc2suZXNjYXBlUmVnZXgob3B0cy5uZWdhdGlvblN5bWJvbC5mcm9udCkpLCBcIi1cIiksIFxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzVmFsdWUgPSBwcm9jZXNzVmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKElucHV0bWFzay5lc2NhcGVSZWdleChvcHRzLm5lZ2F0aW9uU3ltYm9sLmJhY2spICsgXCIkXCIpLCBcIlwiKSwgXG4gICAgICAgICAgICAgICAgICAgIE51bWJlcihwcm9jZXNzVmFsdWUpKSA6IHByb2Nlc3NWYWx1ZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGlzQ29tcGxldGU6IGZ1bmN0aW9uIGlzQ29tcGxldGUoYnVmZmVyLCBvcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXNrZWRWYWx1ZSA9IChvcHRzLm51bWVyaWNJbnB1dCA/IGJ1ZmZlci5zbGljZSgpLnJldmVyc2UoKSA6IGJ1ZmZlcikuam9pbihcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hc2tlZFZhbHVlID0gbWFza2VkVmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKFwiXlwiICsgSW5wdXRtYXNrLmVzY2FwZVJlZ2V4KG9wdHMubmVnYXRpb25TeW1ib2wuZnJvbnQpKSwgXCItXCIpLCBcbiAgICAgICAgICAgICAgICAgICAgbWFza2VkVmFsdWUgPSBtYXNrZWRWYWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoSW5wdXRtYXNrLmVzY2FwZVJlZ2V4KG9wdHMubmVnYXRpb25TeW1ib2wuYmFjaykgKyBcIiRcIiksIFwiXCIpLCBcbiAgICAgICAgICAgICAgICAgICAgbWFza2VkVmFsdWUgPSBtYXNrZWRWYWx1ZS5yZXBsYWNlKG9wdHMucHJlZml4LCBcIlwiKSwgbWFza2VkVmFsdWUgPSBtYXNrZWRWYWx1ZS5yZXBsYWNlKG9wdHMuc3VmZml4LCBcIlwiKSwgXG4gICAgICAgICAgICAgICAgICAgIG1hc2tlZFZhbHVlID0gbWFza2VkVmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKElucHV0bWFzay5lc2NhcGVSZWdleChvcHRzLmdyb3VwU2VwYXJhdG9yKSArIFwiKFswLTldezN9KVwiLCBcImdcIiksIFwiJDFcIiksIFxuICAgICAgICAgICAgICAgICAgICBcIixcIiA9PT0gb3B0cy5yYWRpeFBvaW50ICYmIChtYXNrZWRWYWx1ZSA9IG1hc2tlZFZhbHVlLnJlcGxhY2UoSW5wdXRtYXNrLmVzY2FwZVJlZ2V4KG9wdHMucmFkaXhQb2ludCksIFwiLlwiKSksIFxuICAgICAgICAgICAgICAgICAgICBpc0Zpbml0ZShtYXNrZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbkJlZm9yZU1hc2s6IGZ1bmN0aW9uIG9uQmVmb3JlTWFzayhpbml0aWFsVmFsdWUsIG9wdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJhZGl4UG9pbnQgPSBvcHRzLnJhZGl4UG9pbnQgfHwgXCIsXCI7XG4gICAgICAgICAgICAgICAgICAgIGlzRmluaXRlKG9wdHMuZGlnaXRzKSAmJiAob3B0cy5kaWdpdHMgPSBwYXJzZUludChvcHRzLmRpZ2l0cykpLCBcIm51bWJlclwiICE9IHR5cGVvZiBpbml0aWFsVmFsdWUgJiYgXCJudW1iZXJcIiAhPT0gb3B0cy5pbnB1dFR5cGUgfHwgXCJcIiA9PT0gcmFkaXhQb2ludCB8fCAoaW5pdGlhbFZhbHVlID0gaW5pdGlhbFZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZShcIi5cIiwgcmFkaXhQb2ludCkpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVQYXJ0cyA9IGluaXRpYWxWYWx1ZS5zcGxpdChyYWRpeFBvaW50KSwgaW50ZWdlclBhcnQgPSB2YWx1ZVBhcnRzWzBdLnJlcGxhY2UoL1teXFwtMC05XS9nLCBcIlwiKSwgZGVjaW1hbFBhcnQgPSAxIDwgdmFsdWVQYXJ0cy5sZW5ndGggPyB2YWx1ZVBhcnRzWzFdLnJlcGxhY2UoL1teMC05XS9nLCBcIlwiKSA6IFwiXCIsIGZvcmNlRGlnaXRzID0gMSA8IHZhbHVlUGFydHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWUgPSBpbnRlZ2VyUGFydCArIChcIlwiICE9PSBkZWNpbWFsUGFydCA/IHJhZGl4UG9pbnQgKyBkZWNpbWFsUGFydCA6IGRlY2ltYWxQYXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpZ2l0cyA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcIlwiICE9PSByYWRpeFBvaW50ICYmIChkaWdpdHMgPSBvcHRzLmRpZ2l0c09wdGlvbmFsID8gb3B0cy5kaWdpdHMgPCBkZWNpbWFsUGFydC5sZW5ndGggPyBvcHRzLmRpZ2l0cyA6IGRlY2ltYWxQYXJ0Lmxlbmd0aCA6IG9wdHMuZGlnaXRzLCBcbiAgICAgICAgICAgICAgICAgICAgXCJcIiAhPT0gZGVjaW1hbFBhcnQgfHwgIW9wdHMuZGlnaXRzT3B0aW9uYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlnaXRzRmFjdG9yID0gTWF0aC5wb3coMTAsIGRpZ2l0cyB8fCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZSA9IGluaXRpYWxWYWx1ZS5yZXBsYWNlKElucHV0bWFzay5lc2NhcGVSZWdleChyYWRpeFBvaW50KSwgXCIuXCIpLCBpc05hTihwYXJzZUZsb2F0KGluaXRpYWxWYWx1ZSkpIHx8IChpbml0aWFsVmFsdWUgPSAob3B0cy5yb3VuZGluZ0ZOKHBhcnNlRmxvYXQoaW5pdGlhbFZhbHVlKSAqIGRpZ2l0c0ZhY3RvcikgLyBkaWdpdHNGYWN0b3IpLnRvRml4ZWQoZGlnaXRzKSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlID0gaW5pdGlhbFZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZShcIi5cIiwgcmFkaXhQb2ludCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IG9wdHMuZGlnaXRzICYmIC0xICE9PSBpbml0aWFsVmFsdWUuaW5kZXhPZihyYWRpeFBvaW50KSAmJiAoaW5pdGlhbFZhbHVlID0gaW5pdGlhbFZhbHVlLnN1YnN0cmluZygwLCBpbml0aWFsVmFsdWUuaW5kZXhPZihyYWRpeFBvaW50KSkpLCBcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gb3B0cy5taW4gfHwgbnVsbCAhPT0gb3B0cy5tYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1iZXJWYWx1ZSA9IGluaXRpYWxWYWx1ZS50b1N0cmluZygpLnJlcGxhY2UocmFkaXhQb2ludCwgXCIuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gb3B0cy5taW4gJiYgbnVtYmVyVmFsdWUgPCBvcHRzLm1pbiA/IGluaXRpYWxWYWx1ZSA9IG9wdHMubWluLnRvU3RyaW5nKCkucmVwbGFjZShcIi5cIiwgcmFkaXhQb2ludCkgOiBudWxsICE9PSBvcHRzLm1heCAmJiBudW1iZXJWYWx1ZSA+IG9wdHMubWF4ICYmIChpbml0aWFsVmFsdWUgPSBvcHRzLm1heC50b1N0cmluZygpLnJlcGxhY2UoXCIuXCIsIHJhZGl4UG9pbnQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxpZ25EaWdpdHMoaW5pdGlhbFZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoXCJcIiksIGRpZ2l0cywgb3B0cywgZm9yY2VEaWdpdHMpLmpvaW4oXCJcIik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbkJlZm9yZVdyaXRlOiBmdW5jdGlvbiBvbkJlZm9yZVdyaXRlKGUsIGJ1ZmZlciwgY2FyZXRQb3MsIG9wdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc3RyaXBCdWZmZXIoYnVmZmVyLCBzdHJpcFJhZGl4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoITEgIT09IG9wdHMuX19maW5hbmNlSW5wdXQgfHwgc3RyaXBSYWRpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9ICQuaW5BcnJheShvcHRzLnJhZGl4UG9pbnQsIGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgIT09IHBvc2l0aW9uICYmIGJ1ZmZlci5zcGxpY2UocG9zaXRpb24sIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFwiXCIgIT09IG9wdHMuZ3JvdXBTZXBhcmF0b3IpIGZvciAoOy0xICE9PSAocG9zaXRpb24gPSBidWZmZXIuaW5kZXhPZihvcHRzLmdyb3VwU2VwYXJhdG9yKSk7ICkgYnVmZmVyLnNwbGljZShwb3NpdGlvbiwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQsIGxlYWRpbmd6ZXJvZXMgPSBjaGVja0ZvckxlYWRpbmdaZXJvZXMoYnVmZmVyLCBvcHRzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxlYWRpbmd6ZXJvZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWYgPSBidWZmZXIuc2xpY2UoKS5yZXZlcnNlKCksIGNhcmV0TmR4ID0gYnVmLmpvaW4oXCJcIikuaW5kZXhPZihsZWFkaW5nemVyb2VzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5zcGxpY2UoY2FyZXROZHgsIGxlYWRpbmd6ZXJvZXNbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdDYXJldFBvcyA9IGJ1Zi5sZW5ndGggLSBjYXJldE5keDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwQnVmZmVyKGJ1ZiksIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoRnJvbUJ1ZmZlcjogITAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyOiBidWYucmV2ZXJzZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmV0OiBjYXJldFBvcyA8IG5ld0NhcmV0UG9zID8gY2FyZXRQb3MgOiBuZXdDYXJldFBvc1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZSkgc3dpdGNoIChlLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYmx1clwiOlxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJjaGVja3ZhbFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgIT09IG9wdHMubWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVubWFza2VkID0gb3B0cy5vblVuTWFzayhidWZmZXIuc2xpY2UoKS5yZXZlcnNlKCkuam9pbihcIlwiKSwgdm9pZCAwLCAkLmV4dGVuZCh7fSwgb3B0cywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm1hc2tBc051bWJlcjogITBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgIT09IG9wdHMubWluICYmIHVubWFza2VkIDwgb3B0cy5taW4pIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hGcm9tQnVmZmVyOiAhMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyOiBhbGlnbkRpZ2l0cyhvcHRzLm1pbi50b1N0cmluZygpLnJlcGxhY2UoXCIuXCIsIG9wdHMucmFkaXhQb2ludCkuc3BsaXQoXCJcIiksIG9wdHMuZGlnaXRzLCBvcHRzKS5yZXZlcnNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlcltidWZmZXIubGVuZ3RoIC0gMV0gPT09IG9wdHMubmVnYXRpb25TeW1ib2wuZnJvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm1ick10Y2hzID0gbmV3IFJlZ0V4cChcIiheXCIgKyAoXCJcIiAhPSBvcHRzLm5lZ2F0aW9uU3ltYm9sLmZyb250ID8gSW5wdXRtYXNrLmVzY2FwZVJlZ2V4KG9wdHMubmVnYXRpb25TeW1ib2wuZnJvbnQpICsgXCI/XCIgOiBcIlwiKSArIElucHV0bWFzay5lc2NhcGVSZWdleChvcHRzLnByZWZpeCkgKyBcIikoLiopKFwiICsgSW5wdXRtYXNrLmVzY2FwZVJlZ2V4KG9wdHMuc3VmZml4KSArIChcIlwiICE9IG9wdHMubmVnYXRpb25TeW1ib2wuYmFjayA/IElucHV0bWFzay5lc2NhcGVSZWdleChvcHRzLm5lZ2F0aW9uU3ltYm9sLmJhY2spICsgXCI/XCIgOiBcIlwiKSArIFwiJClcIikuZXhlYyhzdHJpcEJ1ZmZlcihidWZmZXIuc2xpY2UoKSwgITApLnJldmVyc2UoKS5qb2luKFwiXCIpKSwgbnVtYmVyID0gbm1ick10Y2hzID8gbm1ick10Y2hzWzJdIDogXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwID09IG51bWJlciAmJiAocmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoRnJvbUJ1ZmZlcjogITAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcjogWyAwIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBcIlwiICE9PSBvcHRzLnJhZGl4UG9pbnQgJiYgYnVmZmVyWzBdID09PSBvcHRzLnJhZGl4UG9pbnQgJiYgKHJlc3VsdCAmJiByZXN1bHQuYnVmZmVyID8gcmVzdWx0LmJ1ZmZlci5zaGlmdCgpIDogKGJ1ZmZlci5zaGlmdCgpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoRnJvbUJ1ZmZlcjogITAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyOiBzdHJpcEJ1ZmZlcihidWZmZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5lbmZvcmNlRGlnaXRzT25CbHVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiZmZyID0gcmVzdWx0ICYmIHJlc3VsdC5idWZmZXIgfHwgYnVmZmVyLnNsaWNlKCkucmV2ZXJzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yZWZyZXNoRnJvbUJ1ZmZlciA9ICEwLCByZXN1bHQuYnVmZmVyID0gYWxpZ25EaWdpdHMoYmZmciwgb3B0cy5kaWdpdHMsIG9wdHMsICEwKS5yZXZlcnNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uS2V5RG93bjogZnVuY3Rpb24gb25LZXlEb3duKGUsIGJ1ZmZlciwgY2FyZXRQb3MsIG9wdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRpbnB1dCA9ICQodGhpcyksIGJmZnI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmN0cmxLZXkpIHN3aXRjaCAoZS5rZXlDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSBrZXlDb2RlLlVQOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRtYXNrLl9fdmFsdWVTZXQuY2FsbCh0aGlzLCBwYXJzZUZsb2F0KHRoaXMuaW5wdXRtYXNrLnVubWFza2VkdmFsdWUoKSkgKyBwYXJzZUludChvcHRzLnN0ZXApKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQudHJpZ2dlcihcInNldHZhbHVlXCIpLCAhMTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2V5Q29kZS5ET1dOOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRtYXNrLl9fdmFsdWVTZXQuY2FsbCh0aGlzLCBwYXJzZUZsb2F0KHRoaXMuaW5wdXRtYXNrLnVubWFza2VkdmFsdWUoKSkgLSBwYXJzZUludChvcHRzLnN0ZXApKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQudHJpZ2dlcihcInNldHZhbHVlXCIpLCAhMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWUuc2hpZnRLZXkgJiYgKGUua2V5Q29kZSA9PT0ga2V5Q29kZS5ERUxFVEUgfHwgZS5rZXlDb2RlID09PSBrZXlDb2RlLkJBQ0tTUEFDRSB8fCBlLmtleUNvZGUgPT09IGtleUNvZGUuQkFDS1NQQUNFX1NBRkFSSSkgJiYgY2FyZXRQb3MuYmVnaW4gIT09IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJbZS5rZXlDb2RlID09PSBrZXlDb2RlLkRFTEVURSA/IGNhcmV0UG9zLmJlZ2luIC0gMSA6IGNhcmV0UG9zLmVuZF0gPT09IG9wdHMubmVnYXRpb25TeW1ib2wuZnJvbnQpIHJldHVybiBiZmZyID0gYnVmZmVyLnNsaWNlKCkucmV2ZXJzZSgpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXCIgIT09IG9wdHMubmVnYXRpb25TeW1ib2wuZnJvbnQgJiYgYmZmci5zaGlmdCgpLCBcIlwiICE9PSBvcHRzLm5lZ2F0aW9uU3ltYm9sLmJhY2sgJiYgYmZmci5wb3AoKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQudHJpZ2dlcihcInNldHZhbHVlXCIsIFsgYmZmci5qb2luKFwiXCIpLCBjYXJldFBvcy5iZWdpbiBdKSwgITE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoITAgPT09IG9wdHMuX3JhZGl4RGFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFkaXhQb3MgPSAkLmluQXJyYXkob3B0cy5yYWRpeFBvaW50LCBidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLmRpZ2l0c09wdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSByYWRpeFBvcykgcmV0dXJuIGJmZnIgPSBidWZmZXIuc2xpY2UoKS5yZXZlcnNlKCksIGJmZnIucG9wKCksICRpbnB1dC50cmlnZ2VyKFwic2V0dmFsdWVcIiwgWyBiZmZyLmpvaW4oXCJcIiksIGNhcmV0UG9zLmJlZ2luID49IGJmZnIubGVuZ3RoID8gYmZmci5sZW5ndGggOiBjYXJldFBvcy5iZWdpbiBdKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoLTEgIT09IHJhZGl4UG9zICYmIChjYXJldFBvcy5iZWdpbiA8IHJhZGl4UG9zIHx8IGNhcmV0UG9zLmVuZCA8IHJhZGl4UG9zIHx8IGUua2V5Q29kZSA9PT0ga2V5Q29kZS5ERUxFVEUgJiYgY2FyZXRQb3MuYmVnaW4gPT09IHJhZGl4UG9zKSkgcmV0dXJuIGNhcmV0UG9zLmJlZ2luICE9PSBjYXJldFBvcy5lbmQgfHwgZS5rZXlDb2RlICE9PSBrZXlDb2RlLkJBQ0tTUEFDRSAmJiBlLmtleUNvZGUgIT09IGtleUNvZGUuQkFDS1NQQUNFX1NBRkFSSSB8fCBjYXJldFBvcy5iZWdpbisrLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZmZyID0gYnVmZmVyLnNsaWNlKCkucmV2ZXJzZSgpLCBiZmZyLnNwbGljZShiZmZyLmxlbmd0aCAtIGNhcmV0UG9zLmJlZ2luLCBjYXJldFBvcy5iZWdpbiAtIGNhcmV0UG9zLmVuZCArIDEpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZmZyID0gYWxpZ25EaWdpdHMoYmZmciwgb3B0cy5kaWdpdHMsIG9wdHMpLmpvaW4oXCJcIiksICRpbnB1dC50cmlnZ2VyKFwic2V0dmFsdWVcIiwgWyBiZmZyLCBjYXJldFBvcy5iZWdpbiA+PSBiZmZyLmxlbmd0aCA/IHJhZGl4UG9zICsgMSA6IGNhcmV0UG9zLmJlZ2luIF0pLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjdXJyZW5jeToge1xuICAgICAgICAgICAgICAgIHByZWZpeDogXCJcIixcbiAgICAgICAgICAgICAgICBncm91cFNlcGFyYXRvcjogXCIsXCIsXG4gICAgICAgICAgICAgICAgYWxpYXM6IFwibnVtZXJpY1wiLFxuICAgICAgICAgICAgICAgIGRpZ2l0czogMixcbiAgICAgICAgICAgICAgICBkaWdpdHNPcHRpb25hbDogITFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWNpbWFsOiB7XG4gICAgICAgICAgICAgICAgYWxpYXM6IFwibnVtZXJpY1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW50ZWdlcjoge1xuICAgICAgICAgICAgICAgIGFsaWFzOiBcIm51bWVyaWNcIixcbiAgICAgICAgICAgICAgICBkaWdpdHM6IDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwZXJjZW50YWdlOiB7XG4gICAgICAgICAgICAgICAgYWxpYXM6IFwibnVtZXJpY1wiLFxuICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICBtYXg6IDEwMCxcbiAgICAgICAgICAgICAgICBzdWZmaXg6IFwiICVcIixcbiAgICAgICAgICAgICAgICBkaWdpdHM6IDAsXG4gICAgICAgICAgICAgICAgYWxsb3dNaW51czogITFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbmRpYW5uczoge1xuICAgICAgICAgICAgICAgIGFsaWFzOiBcIm51bWVyaWNcIixcbiAgICAgICAgICAgICAgICBfbWFzazogZnVuY3Rpb24gX21hc2sob3B0cykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCIoXCIgKyBvcHRzLmdyb3VwU2VwYXJhdG9yICsgXCI5OSl7KnwxfShcIiArIG9wdHMuZ3JvdXBTZXBhcmF0b3IgKyBcIjk5OSl7MXwxfVwiO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ3JvdXBTZXBhcmF0b3I6IFwiLFwiLFxuICAgICAgICAgICAgICAgIHJhZGl4UG9pbnQ6IFwiLlwiLFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIjBcIixcbiAgICAgICAgICAgICAgICBkaWdpdHM6IDIsXG4gICAgICAgICAgICAgICAgZGlnaXRzT3B0aW9uYWw6ICExXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLCBtb2R1bGUuZXhwb3J0cyA9IElucHV0bWFzaztcbiAgICB9LCBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHZhciBfaW5wdXRtYXNrID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKTtcbiAgICAgICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICAgICAgICAgIH0gOiBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gICAgICAgICAgICB9LCBfdHlwZW9mKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICAgICAgICAgICAgcmV0dXJuICFjYWxsIHx8IFwib2JqZWN0XCIgIT09IF90eXBlb2YoY2FsbCkgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBjYWxsID8gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSA6IGNhbGw7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgICAgICAgICBpZiAodm9pZCAwID09PSBzZWxmKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIHN1cGVyQ2xhc3MgJiYgbnVsbCAhPT0gc3VwZXJDbGFzcykgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSwgc3VwZXJDbGFzcyAmJiBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpIHtcbiAgICAgICAgICAgIHZhciBfY2FjaGUgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIE1hcCA/IG5ldyBNYXAoKSA6IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiBfd3JhcE5hdGl2ZVN1cGVyID0gZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykge1xuICAgICAgICAgICAgICAgIGlmIChudWxsID09PSBDbGFzcyB8fCAhX2lzTmF0aXZlRnVuY3Rpb24oQ2xhc3MpKSByZXR1cm4gQ2xhc3M7XG4gICAgICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgQ2xhc3MpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgICAgICAgICBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgX2NhY2hlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfY2FjaGUuaGFzKENsYXNzKSkgcmV0dXJuIF9jYWNoZS5nZXQoQ2xhc3MpO1xuICAgICAgICAgICAgICAgICAgICBfY2FjaGUuc2V0KENsYXNzLCBXcmFwcGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JhcHBlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb25zdHJ1Y3QoQ2xhc3MsIGFyZ3VtZW50cywgX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFdyYXBwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBXcmFwcGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSwgX3NldFByb3RvdHlwZU9mKFdyYXBwZXIsIENsYXNzKTtcbiAgICAgICAgICAgIH0sIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICAgICAgICAgIGlmIChcInVuZGVmaW5lZFwiID09IHR5cGVvZiBSZWZsZWN0IHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuICExO1xuICAgICAgICAgICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiAhMTtcbiAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFByb3h5KSByZXR1cm4gITA7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbigpIHt9KSksIFxuICAgICAgICAgICAgICAgICEwO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgICAgICAgIHJldHVybiBfY29uc3RydWN0ID0gaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdCA6IGZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykge1xuICAgICAgICAgICAgICAgIHZhciBhID0gWyBudWxsIF07XG4gICAgICAgICAgICAgICAgYS5wdXNoLmFwcGx5KGEsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIHZhciBDb25zdHJ1Y3RvciA9IEZ1bmN0aW9uLmJpbmQuYXBwbHkoUGFyZW50LCBhKSwgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gQ2xhc3MgJiYgX3NldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpLCBpbnN0YW5jZTtcbiAgICAgICAgICAgIH0sIF9jb25zdHJ1Y3QuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaXNOYXRpdmVGdW5jdGlvbihmbikge1xuICAgICAgICAgICAgcmV0dXJuIC0xICE9PSBGdW5jdGlvbi50b1N0cmluZy5jYWxsKGZuKS5pbmRleE9mKFwiW25hdGl2ZSBjb2RlXVwiKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyA9IHAsIG87XG4gICAgICAgICAgICB9LCBfc2V0UHJvdG90eXBlT2YobywgcCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICAgICAgICAgIHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICAgICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgICAgICAgICB9LCBfZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChkb2N1bWVudC5oZWFkLmNyZWF0ZVNoYWRvd1Jvb3QgfHwgZG9jdW1lbnQuaGVhZC5hdHRhY2hTaGFkb3cpIHtcbiAgICAgICAgICAgIHZhciBJbnB1dG1hc2tFbGVtZW50ID0gZnVuY3Rpb24oX0hUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gSW5wdXRtYXNrRWxlbWVudCgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzO1xuICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSW5wdXRtYXNrRWxlbWVudCksIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKElucHV0bWFza0VsZW1lbnQpLmNhbGwodGhpcykpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlTmFtZXMgPSBfdGhpcy5nZXRBdHRyaWJ1dGVOYW1lcygpLCBzaGFkb3cgPSBfdGhpcy5hdHRhY2hTaGFkb3coe1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogXCJjbG9zZWRcIlxuICAgICAgICAgICAgICAgICAgICB9KSwgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGF0dHIgaW4gaW5wdXQudHlwZSA9IFwidGV4dFwiLCBzaGFkb3cuYXBwZW5kQ2hpbGQoaW5wdXQpLCBhdHRyaWJ1dGVOYW1lcykgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGF0dHJpYnV0ZU5hbWVzLCBhdHRyKSAmJiBpbnB1dC5zZXRBdHRyaWJ1dGUoXCJkYXRhLWlucHV0bWFzay1cIiArIGF0dHJpYnV0ZU5hbWVzW2F0dHJdLCBfdGhpcy5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZXNbYXR0cl0pKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfaW5wdXRtYXNrLmRlZmF1bHQoKS5tYXNrKGlucHV0KSwgaW5wdXQuaW5wdXRtYXNrLnNoYWRvd1Jvb3QgPSBzaGFkb3csIFxuICAgICAgICAgICAgICAgICAgICBfdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9pbmhlcml0cyhJbnB1dG1hc2tFbGVtZW50LCBfSFRNTEVsZW1lbnQpLCBJbnB1dG1hc2tFbGVtZW50O1xuICAgICAgICAgICAgfShfd3JhcE5hdGl2ZVN1cGVyKEhUTUxFbGVtZW50KSk7XG4gICAgICAgICAgICBjdXN0b21FbGVtZW50cy5kZWZpbmUoXCJpbnB1dC1tYXNrXCIsIElucHV0bWFza0VsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfSwgZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgICAgICAgICAgfSA6IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICAgICAgICAgIH0sIF90eXBlb2Yob2JqKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMyksIElucHV0bWFzayA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG4gICAgICAgIHZvaWQgMCA9PT0gJC5mbi5pbnB1dG1hc2sgJiYgKCQuZm4uaW5wdXRtYXNrID0gZnVuY3Rpb24oZm4sIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHZhciBucHRtYXNrLCBpbnB1dCA9IHRoaXNbMF07XG4gICAgICAgICAgICBpZiAodm9pZCAwID09PSBvcHRpb25zICYmIChvcHRpb25zID0ge30pLCBcInN0cmluZ1wiID09IHR5cGVvZiBmbikgc3dpdGNoIChmbikge1xuICAgICAgICAgICAgICBjYXNlIFwidW5tYXNrZWR2YWx1ZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dCAmJiBpbnB1dC5pbnB1dG1hc2sgPyBpbnB1dC5pbnB1dG1hc2sudW5tYXNrZWR2YWx1ZSgpIDogJChpbnB1dCkudmFsKCk7XG5cbiAgICAgICAgICAgICAgY2FzZSBcInJlbW92ZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRtYXNrICYmIHRoaXMuaW5wdXRtYXNrLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGNhc2UgXCJnZXRlbXB0eW1hc2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQgJiYgaW5wdXQuaW5wdXRtYXNrID8gaW5wdXQuaW5wdXRtYXNrLmdldGVtcHR5bWFzaygpIDogXCJcIjtcblxuICAgICAgICAgICAgICBjYXNlIFwiaGFzTWFza2VkVmFsdWVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gISghaW5wdXQgfHwgIWlucHV0LmlucHV0bWFzaykgJiYgaW5wdXQuaW5wdXRtYXNrLmhhc01hc2tlZFZhbHVlKCk7XG5cbiAgICAgICAgICAgICAgY2FzZSBcImlzQ29tcGxldGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gIWlucHV0IHx8ICFpbnB1dC5pbnB1dG1hc2sgfHwgaW5wdXQuaW5wdXRtYXNrLmlzQ29tcGxldGUoKTtcblxuICAgICAgICAgICAgICBjYXNlIFwiZ2V0bWV0YWRhdGFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQgJiYgaW5wdXQuaW5wdXRtYXNrID8gaW5wdXQuaW5wdXRtYXNrLmdldG1ldGFkYXRhKCkgOiB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgY2FzZSBcInNldHZhbHVlXCI6XG4gICAgICAgICAgICAgICAgSW5wdXRtYXNrLnNldFZhbHVlKGlucHV0LCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIFwib3B0aW9uXCI6XG4gICAgICAgICAgICAgICAgaWYgKFwic3RyaW5nXCIgIT0gdHlwZW9mIG9wdGlvbnMpIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IHRoaXMuaW5wdXRtYXNrKSByZXR1cm4gdGhpcy5pbnB1dG1hc2sub3B0aW9uKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmJiB2b2lkIDAgIT09IGlucHV0LmlucHV0bWFzaykgcmV0dXJuIGlucHV0LmlucHV0bWFzay5vcHRpb24ob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5hbGlhcyA9IGZuLCBucHRtYXNrID0gbmV3IElucHV0bWFzayhvcHRpb25zKSwgdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBucHRtYXNrLm1hc2sodGhpcyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZuKSkgcmV0dXJuIG9wdGlvbnMuYWxpYXMgPSBmbiwgbnB0bWFzayA9IG5ldyBJbnB1dG1hc2sob3B0aW9ucyksIFxuICAgICAgICAgICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgbnB0bWFzay5tYXNrKHRoaXMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChcIm9iamVjdFwiID09IF90eXBlb2YoZm4pKSByZXR1cm4gbnB0bWFzayA9IG5ldyBJbnB1dG1hc2soZm4pLCB2b2lkIDAgPT09IGZuLm1hc2sgJiYgdm9pZCAwID09PSBmbi5hbGlhcyA/IHRoaXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gdGhpcy5pbnB1dG1hc2spIHJldHVybiB0aGlzLmlucHV0bWFzay5vcHRpb24oZm4pO1xuICAgICAgICAgICAgICAgICAgICBucHRtYXNrLm1hc2sodGhpcyk7XG4gICAgICAgICAgICAgICAgfSkgOiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIG5wdG1hc2subWFzayh0aGlzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodm9pZCAwID09PSBmbikgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgbnB0bWFzayA9IG5ldyBJbnB1dG1hc2sob3B0aW9ucyksIG5wdG1hc2subWFzayh0aGlzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICB2YXIgaW0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpLCBqUXVlcnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuICAgICAgICBpbS5kZXBlbmRlbmN5TGliID09PSBqUXVlcnkgJiYgX193ZWJwYWNrX3JlcXVpcmVfXygxMiksIG1vZHVsZS5leHBvcnRzID0gaW07XG4gICAgfSBdLCBpbnN0YWxsZWRNb2R1bGVzID0ge30sIF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXMsIF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXMsIFxuICAgIF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuICAgICAgICBfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkgfHwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgICAgICAgZ2V0OiBnZXR0ZXJcbiAgICAgICAgfSk7XG4gICAgfSwgX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuICAgICAgICBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgU3ltYm9sLnRvU3RyaW5nVGFnICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcbiAgICAgICAgICAgIHZhbHVlOiBcIk1vZHVsZVwiXG4gICAgICAgIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgIHZhbHVlOiAhMFxuICAgICAgICB9KTtcbiAgICB9LCBfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuICAgICAgICBpZiAoMSAmIG1vZGUgJiYgKHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSkpLCA4ICYgbW9kZSkgcmV0dXJuIHZhbHVlO1xuICAgICAgICBpZiAoNCAmIG1vZGUgJiYgXCJvYmplY3RcIiA9PSB0eXBlb2YgdmFsdWUgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBpZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCBcImRlZmF1bHRcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfSksIDIgJiBtb2RlICYmIFwic3RyaW5nXCIgIT0gdHlwZW9mIHZhbHVlKSBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZVtrZXldO1xuICAgICAgICB9LmJpbmQobnVsbCwga2V5KSk7XG4gICAgICAgIHJldHVybiBucztcbiAgICB9LCBfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiAgICAgICAgdmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/IGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9kdWxlLmRlZmF1bHQ7XG4gICAgICAgIH0gOiBmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkge1xuICAgICAgICAgICAgcmV0dXJuIG1vZHVsZTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIFwiYVwiLCBnZXR0ZXIpLCBnZXR0ZXI7XG4gICAgfSwgX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpO1xuICAgIH0sIF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCIsIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTMpO1xuICAgIGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbiAgICAgICAgaWYgKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSByZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiAgICAgICAgdmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuICAgICAgICAgICAgaTogbW9kdWxlSWQsXG4gICAgICAgICAgICBsOiAhMSxcbiAgICAgICAgICAgIGV4cG9ydHM6IHt9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSwgXG4gICAgICAgIG1vZHVsZS5sID0gITAsIG1vZHVsZS5leHBvcnRzO1xuICAgIH1cbiAgICB2YXIgbW9kdWxlcywgaW5zdGFsbGVkTW9kdWxlcztcbn0pOyJdfQ== +!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("jquery"));else if("function"==typeof define&&define.amd)define(["jquery"],t);else{var i="object"==typeof exports?t(require("jquery")):t(e.jQuery);for(var n in i)("object"==typeof exports?exports:e)[n]=i[n]}}(window,function(__WEBPACK_EXTERNAL_MODULE__3__){return modules=[function(e){e.exports=JSON.parse('{"BACKSPACE":8,"BACKSPACE_SAFARI":127,"DELETE":46,"DOWN":40,"END":35,"ENTER":13,"ESCAPE":27,"HOME":36,"INSERT":45,"LEFT":37,"PAGE_DOWN":34,"PAGE_UP":33,"RIGHT":39,"SPACE":32,"TAB":9,"UP":38,"X":88,"CONTROL":17}')},function(e,t,i){"use strict";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)}var a=i(2),r=i(4),o=r.document,s=i(5).generateMaskSet,u=i(5).analyseMask,l=i(8);function c(e,t,i){if(!(this instanceof c))return new c(e,t,i);this.el=void 0,this.events={},this.maskset=void 0,this.refreshValue=!1,!0!==i&&(a.isPlainObject(e)?t=e:(t=t||{},e&&(t.alias=e)),this.opts=a.extend(!0,{},this.defaults,t),this.noMasksCache=t&&void 0!==t.definitions,this.userOptions=t||{},p(this.opts.alias,t,this.opts),this.isRTL=this.opts.numericInput)}function p(e,t,i){var n=c.prototype.aliases[e];return n?(n.alias&&p(n.alias,void 0,i),a.extend(!0,i,n),a.extend(!0,i,t),!0):(null===i.mask&&(i.mask=e),!1)}c.prototype={dataAttribute:"data-inputmask",defaults:{_maxTestPos:500,placeholder:"_",optionalmarker:["[","]"],quantifiermarker:["{","}"],groupmarker:["(",")"],alternatormarker:"|",escapeChar:"\\",mask:null,regex:null,oncomplete:a.noop,onincomplete:a.noop,oncleared:a.noop,repeat:0,greedy:!1,autoUnmask:!1,removeMaskOnSubmit:!1,clearMaskOnLostFocus:!0,insertMode:!0,insertModeVisual:!0,clearIncomplete:!1,alias:null,onKeyDown:a.noop,onBeforeMask:null,onBeforePaste:function(e,t){return a.isFunction(t.onBeforeMask)?t.onBeforeMask.call(this,e,t):e},onBeforeWrite:null,onUnMask:null,showMaskOnFocus:!0,showMaskOnHover:!0,onKeyValidation:a.noop,skipOptionalPartCharacter:" ",numericInput:!1,rightAlign:!1,undoOnEscape:!0,radixPoint:"",_radixDance:!1,groupSeparator:"",keepStatic:null,positionCaretOnTab:!0,tabThrough:!1,supportsInputType:["text","tel","url","password","search"],ignorables:[8,9,19,27,33,34,35,36,37,38,39,40,45,46,93,112,113,114,115,116,117,118,119,120,121,122,123,0,229],isComplete:null,preValidation:null,postValidation:null,staticDefinitionSymbol:void 0,jitMasking:!1,nullable:!0,inputEventOnly:!1,noValuePatching:!1,positionCaretOnClick:"lvp",casing:null,inputmode:"text",importDataAttributes:!0,shiftPositions:!0},definitions:{9:{validator:"[0-91-9]",definitionSymbol:"*"},a:{validator:"[A-Za-zА-яЁёÀ-ÿµ]",definitionSymbol:"*"},"*":{validator:"[0-91-9A-Za-zА-яЁёÀ-ÿµ]"}},aliases:{},masksCache:{},mask:function(e){var t=this;return"string"==typeof e&&(e=o.getElementById(e)||o.querySelectorAll(e)),e=e.nodeName?[e]:e,a.each(e,function(e,i){var n=a.extend(!0,{},t.opts);if(function(e,t,i,n){function o(t,a){null!==(a=void 0!==a?a:e.getAttribute(n+"-"+t))&&("string"==typeof a&&(0===t.indexOf("on")?a=r[a]:"false"===a?a=!1:"true"===a&&(a=!0)),i[t]=a)}if(!0===t.importDataAttributes){var s,u,l,c,f=e.getAttribute(n);if(f&&""!==f&&(f=f.replace(/'/g,'"'),u=JSON.parse("{"+f+"}")),u)for(c in l=void 0,u)if("alias"===c.toLowerCase()){l=u[c];break}for(s in o("alias",l),i.alias&&p(i.alias,i,t),t){if(u)for(c in l=void 0,u)if(c.toLowerCase()===s.toLowerCase()){l=u[c];break}o(s,l)}}return a.extend(!0,t,i),"rtl"!==e.dir&&!t.rightAlign||(e.style.textAlign="right"),"rtl"!==e.dir&&!t.numericInput||(e.dir="ltr",e.removeAttribute("dir"),t.isRTL=!0),Object.keys(i).length}(i,n,a.extend(!0,{},t.userOptions),t.dataAttribute)){var o=s(n,t.noMasksCache);void 0!==o&&(void 0!==i.inputmask&&(i.inputmask.opts.autoUnmask=!0,i.inputmask.remove()),i.inputmask=new c(void 0,void 0,!0),i.inputmask.opts=n,i.inputmask.noMasksCache=t.noMasksCache,i.inputmask.userOptions=a.extend(!0,{},t.userOptions),i.inputmask.isRTL=n.isRTL||n.numericInput,i.inputmask.el=i,i.inputmask.maskset=o,a.data(i,"_inputmask_opts",n),l.call(i.inputmask,{action:"mask"}))}}),e&&e[0]&&e[0].inputmask||this},option:function(e,t){return"string"==typeof e?this.opts[e]:"object"===n(e)?(a.extend(this.userOptions,e),this.el&&!0!==t&&this.mask(this.el),this):void 0},unmaskedvalue:function(e){return this.maskset=this.maskset||s(this.opts,this.noMasksCache),l.call(this,{action:"unmaskedvalue",value:e})},remove:function(){return l.call(this,{action:"remove"})},getemptymask:function(){return this.maskset=this.maskset||s(this.opts,this.noMasksCache),l.call(this,{action:"getemptymask"})},hasMaskedValue:function(){return!this.opts.autoUnmask},isComplete:function(){return this.maskset=this.maskset||s(this.opts,this.noMasksCache),l.call(this,{action:"isComplete"})},getmetadata:function(){return this.maskset=this.maskset||s(this.opts,this.noMasksCache),l.call(this,{action:"getmetadata"})},isValid:function(e){return this.maskset=this.maskset||s(this.opts,this.noMasksCache),l.call(this,{action:"isValid",value:e})},format:function(e,t){return this.maskset=this.maskset||s(this.opts,this.noMasksCache),l.call(this,{action:"format",value:e,metadata:t})},setValue:function(e){this.el&&a(this.el).trigger("setvalue",[e])},analyseMask:u},c.extendDefaults=function(e){a.extend(!0,c.prototype.defaults,e)},c.extendDefinitions=function(e){a.extend(!0,c.prototype.definitions,e)},c.extendAliases=function(e){a.extend(!0,c.prototype.aliases,e)},c.format=function(e,t,i){return c(t).format(e,i)},c.unmask=function(e,t){return c(t).unmaskedvalue(e)},c.isValid=function(e,t){return c(t).isValid(e)},c.remove=function(e){"string"==typeof e&&(e=o.getElementById(e)||o.querySelectorAll(e)),e=e.nodeName?[e]:e,a.each(e,function(e,t){t.inputmask&&t.inputmask.remove()})},c.setValue=function(e,t){"string"==typeof e&&(e=o.getElementById(e)||o.querySelectorAll(e)),e=e.nodeName?[e]:e,a.each(e,function(e,i){i.inputmask?i.inputmask.setValue(t):a(i).trigger("setvalue",[t])})};var f=new RegExp("(\\"+["/",".","*","+","?","|","(",")","[","]","{","}","\\","$","^"].join("|\\")+")","gim");c.escapeRegex=function(e){return e.replace(f,"\\$1")},c.dependencyLib=a,r.Inputmask=c,e.exports=c},function(e,t,i){"use strict";var n=i(3);if(void 0===n)throw"jQuery not loaded!";e.exports=n},function(e,t){e.exports=__WEBPACK_EXTERNAL_MODULE__3__},function(module,exports,__webpack_require__){"use strict";var __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(e){return(_typeof="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)}__WEBPACK_AMD_DEFINE_RESULT__=function(){return"undefined"!=typeof window?window:new(eval("require('jsdom').JSDOM"))("").window}.call(exports,__webpack_require__,exports,module),void 0===__WEBPACK_AMD_DEFINE_RESULT__||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__)},function(e,t,i){"use strict";var n=i(2);e.exports={generateMaskSet:function(e,t){function i(e,i,a){var r,o,s=!1;if(null!==e&&""!==e||(e=(s=null!==a.regex)?(e=a.regex).replace(/^(\^)(.*)(\$)$/,"$2"):(s=!0,".*")),1===e.length&&!1===a.greedy&&0!==a.repeat&&(a.placeholder=""),0t.alternation)for(var a=t.alternation;as._maxTestPos&&void 0!==h)throw"Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. "+i.mask;if(u===e&&void 0===o.matches)return c.push({match:o,locator:l.reverse(),cd:f,mloc:{}}),!0;if(void 0!==o.matches){if(o.isGroup&&h!==o){if(o=m(t.matches[a.inArray(o,t.matches)+1],l,h))return!0}else if(o.isOptional){var _=o,S=c.length;if(o=d(o,n,l,h)){if(a.each(c,function(e,t){S<=e&&(t.match.optionality=!0)}),r=c[c.length-1].match,void 0!==h||!v(r,_))return!0;p=!0,u=e}}else if(o.isAlternator){var P,w=o,E=[],M=c.slice(),A=l.length,O=0=s.keepStatic)&&(F=F.slice(0,1));for(var L=!1,N=0;N=U.quantifier.min,r.jit=(z||1)*Q.matches.indexOf(r)>=U.quantifier.jit,r.optionalQuantifier&&v(r,Q)){p=!0,u=e;break}return r.jit&&(i.jitOffset[e]=Q.matches.length-Q.matches.indexOf(r)),!0}}else if(o=d(o,n,l,h))return!0}else u++;var W,$}for(var h=0u.end&&(v=u.end,g=u.begin)),-1===_&&void 0===o)c=(f=j(l=0)).alternation;else for(;0<=_;_--)if((p=i.validPositions[_])&&void 0!==p.alternation){if(f&&f.locator[p.alternation]!==p.locator[p.alternation])break;l=_,c=i.validPositions[l].alternation,f=p}if(void 0!==c){h=parseInt(l),i.excludes[h]=i.excludes[h]||[],!0!==e&&i.excludes[h].push(A(f)+":"+f.alternation);var S=[],P=-1;for(d=h;dc){var b=!1;if(i.jitOffset[c]&&void 0===i.validPositions[U(c)]&&(!1!==(d=V(c+i.jitOffset[c],t,!0))&&(!0!==o&&(d.caret=c),b=!0)),e.end>c&&(i.validPositions[c]=void 0),!b&&!q(c,s.keepStatic))for(var x=c+1,_=U(c);x<=_;x++)if(!1!==(d=f(x,t,n))){d=H(c,void 0!==d.pos?d.pos:x)||d,c=x;break}}}else d={caret:U(c)}}}else d=!1;!1!==d||!s.keepStatic||!oe(I())&&0!==c||n||!0===o?l(e)&&i.tests[c]&&1e+1?t[e+1]&&!0===t[e+1].match.static&&t[e+1]:t[e+1];return a&&r}var u=0,l=void 0!==e.begin?e.begin:e,c=void 0!==e.end?e.end:e;if(e.begin>e.end&&(l=e.end,c=e.begin),r=void 0!==r?r:l,l!==c||s.insertMode&&void 0!==i.validPositions[r]&&void 0===n||void 0===t){var p,f=a.extend(!0,{},i.validPositions),d=M(void 0,!0);for(i.p=l,p=d;l<=p;p--)delete i.validPositions[p],void 0===t&&delete i.tests[p+1];var m,h,v=!0,g=r,k=g;for(t&&(i.validPositions[r]=a.extend(!0,{},t),k++,g++),p=t?c:c-1;p<=d;p++){if(void 0!==(m=f[p])&&!0!==m.generatedInput&&(c<=p||l<=p&&o(p,f,{begin:l,end:c}))){for(;""!==j(k).match.def;){if(!1!==(h=F(k,m,s))||"+"===m.match.def){"+"===m.match.def&&I(!0);var y=V(k,m.input,"+"!==m.match.def,"+"!==m.match.def);if(v=!1!==y,g=(y.pos||k)+1,!v&&h)break}else v=!1;if(v){void 0===t&&m.match.static&&p===e.begin&&u++;break}if(!v&&k>i.maskLength)break;k++}""==j(k).match.def&&(v=!1),k=g}if(!v)break}if(!v)return i.validPositions=a.extend(!0,{},f),E(!0),!1}else t&&j(r).match.cd===t.match.cd&&(i.validPositions[r]=a.extend(!0,{},t));return E(!0),u}function q(e,t,n){var a=C(e).match;if(""===a.def&&(a=j(e).match),!0!==a.static)return a.fn;if(!0===n&&void 0!==i.validPositions[e]&&!0!==i.validPositions[e].generatedInput)return!0;if(!0!==t&&-11+(""===r[r.length-1].match.def?1:0)}var o=D(e,T(e)),s=W(e,o.match);return o.match.def!==s}return!1}function U(e,t,i){void 0===i&&(i=!0);for(var n=e+1;""!==j(n).match.def&&(!0===t&&(!0!==j(n).match.newBlockMarker||!q(n,void 0,!0))||!0!==t&&!q(n,void 0,i));)n++;return n}function z(e,t){var i,n=e;if(n<=0)return 0;for(;0<--n&&(!0===t&&!0!==j(n).match.newBlockMarker||!0!==t&&!q(n,void 0,!0)&&((i=T(n)).length<2||2===i.length&&""===i[1].match.def)););return n}function Q(e,t,i,n,r){if(n&&a.isFunction(s.onBeforeWrite)){var o=s.onBeforeWrite.call(v,n,t,i,s);if(o){if(o.refreshFromBuffer){var u=o.refreshFromBuffer;B(!0===u?u:u.start,u.end,o.buffer||t),t=I(!0)}void 0!==i&&(i=void 0!==o.caret?o.caret:i)}}if(void 0!==e&&(e.inputmask._valueSet(t.join("")),void 0===i||void 0!==n&&"blur"===n.type||ne(e,i,void 0,void 0,void 0!==n&&"keydown"===n.type&&(n.keyCode===f.DELETE||n.keyCode===f.BACKSPACE)),!0===r)){var l=a(e),c=e.inputmask._valueGet();b=!0,l.trigger("input"),setTimeout(function(){c===R().join("")?l.trigger("cleared"):!0===oe(t)&&l.trigger("complete")},0)}}function W(e,t,n){if(void 0!==(t=t||j(e).match).placeholder||!0===n)return a.isFunction(t.placeholder)?t.placeholder(s):t.placeholder;if(!0!==t.static)return s.placeholder.charAt(e%s.placeholder.length);if(-11+(""===o[o.length-1].match.def?1:0))for(var l=0;l=l.length?o.length:l.length,f=u.length>=c.length?u.length:c.length,d="",m=[];o.lengthe.scrollWidth?c:0,e.inputmask.caretPos={begin:t,end:i},s.insertModeVisual&&!1===s.insertMode&&t===i&&(u||i++),e===(e.inputmask.shadowRoot||o).activeElement)if("setSelectionRange"in e)e.setSelectionRange(t,i);else if(r.getSelection){if(l=o.createRange(),void 0===e.firstChild||null===e.firstChild){var p=o.createTextNode("");e.appendChild(p)}l.setStart(e.firstChild,t=I().length&&l>=n.end&&(n.end=l+1),t===f.BACKSPACE?n.end-n.begin<1&&(n.begin=z(n.begin)):t===f.DELETE&&n.begin===n.end&&(n.end=q(n.end,!0,!0)?n.end+1:U(n.end)+1),!1!==(u=K(n))){if(!0!==a&&!1!==s.keepStatic||null!==s.regex&&-1!==j(n.begin).match.def.indexOf("|")){var c=G(!0);if(c){var p=void 0!==c.caret?c.caret:c.pos?U(c.pos.begin?c.pos.begin:c.pos):M(-1,!0);(t!==f.DELETE||n.begin>p)&&n.begin}}!0!==a&&(i.p=t===f.DELETE?n.begin+u:n.begin)}}function ue(e,t){e.inputmask.refreshValue=!1,a.isFunction(s.onBeforeMask)&&(t=s.onBeforeMask.call(v,t,s)||t),ee(e,!0,!1,t=t.toString().split("")),d=I().join(""),(s.clearMaskOnLostFocus||s.clearIncomplete)&&e.inputmask._valueGet()===R().join("")&&-1===M()&&e.inputmask._valueSet("")}if(void 0!==t)switch(t.action){case"isComplete":return g=t.el,oe(I());case"unmaskedvalue":return void 0!==g&&void 0===t.value||(J=t.value,J=(a.isFunction(s.onBeforeMask)&&s.onBeforeMask.call(v,J,s)||J).split(""),ee.call(this,void 0,!1,!1,J),a.isFunction(s.onBeforeWrite)&&s.onBeforeWrite.call(v,void 0,I(),0,s)),te(g);case"mask":!function(e){Y.off(e);var t=function(e,t){"textarea"!==e.tagName.toLowerCase()&&t.ignorables.push(f.ENTER);var i=e.getAttribute("type"),r="input"===e.tagName.toLowerCase()&&-1!==a.inArray(i,t.supportsInputType)||e.isContentEditable||"textarea"===e.tagName.toLowerCase();if(!r)if("input"===e.tagName.toLowerCase()){var s=o.createElement("input");s.setAttribute("type",i),r="text"===s.type,s=null}else r="partial";return!1!==r?function(e){var i,r;function s(){return this.inputmask?this.inputmask.opts.autoUnmask?this.inputmask.unmaskedvalue():-1!==M()||!0!==t.nullable?(this.inputmask.shadowRoot||o.activeElement)===this&&t.clearMaskOnLostFocus?(k?re(I().slice()).reverse():re(I().slice())).join(""):i.call(this):"":i.call(this)}function u(e){r.call(this,e),this.inputmask&&ue(this,e)}if(!e.inputmask.__valueGet){if(!0!==t.noValuePatching){if(Object.getOwnPropertyDescriptor){"function"!=typeof Object.getPrototypeOf&&(Object.getPrototypeOf="object"===n("test".__proto__)?function(e){return e.__proto__}:function(e){return e.constructor.prototype});var l=Object.getPrototypeOf?Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e),"value"):void 0;l&&l.get&&l.set?(i=l.get,r=l.set,Object.defineProperty(e,"value",{get:s,set:u,configurable:!0})):"input"!==e.tagName.toLowerCase()&&(i=function(){return this.textContent},r=function(e){this.textContent=e},Object.defineProperty(e,"value",{get:s,set:u,configurable:!0}))}else o.__lookupGetter__&&e.__lookupGetter__("value")&&(i=e.__lookupGetter__("value"),r=e.__lookupSetter__("value"),e.__defineGetter__("value",s),e.__defineSetter__("value",u));e.inputmask.__valueGet=i,e.inputmask.__valueSet=r}e.inputmask._valueGet=function(e){return k&&!0!==e?i.call(this.el).split("").reverse().join(""):i.call(this.el)},e.inputmask._valueSet=function(e,t){r.call(this.el,null==e?"":!0!==t&&k?e.split("").reverse().join(""):e)},void 0===i&&(i=function(){return this.value},r=function(e){this.value=e},function(e){if(a.valHooks&&(void 0===a.valHooks[e]||!0!==a.valHooks[e].inputmaskpatch)){var i=a.valHooks[e]&&a.valHooks[e].get?a.valHooks[e].get:function(e){return e.value},n=a.valHooks[e]&&a.valHooks[e].set?a.valHooks[e].set:function(e,t){return e.value=t,e};a.valHooks[e]={get:function(e){if(e.inputmask){if(e.inputmask.opts.autoUnmask)return e.inputmask.unmaskedvalue();var n=i(e);return-1!==M(void 0,void 0,e.inputmask.maskset.validPositions)||!0!==t.nullable?n:""}return i(e)},set:function(e,t){var i=n(e,t);return e.inputmask&&ue(e,t),i},inputmaskpatch:!0}}}(e.type),function(e){Y.on(e,"mouseenter",function(){var e=this.inputmask._valueGet(!0);e!==(k?I().reverse():I()).join("")&&ue(this,e)})}(e))}}(e):e.inputmask=void 0,r}(e,s);if(!1!==t){m=a(g=e),P=g.placeholder,-1===(h=void 0!==g?g.maxLength:void 0)&&(h=void 0),"inputMode"in g&&null===g.getAttribute("inputmode")&&(g.inputMode=s.inputmode,g.setAttribute("inputmode",s.inputmode)),!0===t&&(s.showMaskOnFocus=s.showMaskOnFocus&&-1===["cc-number","cc-exp"].indexOf(g.autocomplete),p&&(s.insertModeVisual=!1),Y.on(g,"submit",X.submitEvent),Y.on(g,"reset",X.resetEvent),Y.on(g,"blur",X.blurEvent),Y.on(g,"focus",X.focusEvent),Y.on(g,"invalid",X.invalidEvent),Y.on(g,"click",X.clickEvent),Y.on(g,"mouseleave",X.mouseleaveEvent),Y.on(g,"mouseenter",X.mouseenterEvent),Y.on(g,"paste",X.pasteEvent),Y.on(g,"cut",X.cutEvent),Y.on(g,"complete",s.oncomplete),Y.on(g,"incomplete",s.onincomplete),Y.on(g,"cleared",s.oncleared),l||!0===s.inputEventOnly?g.removeAttribute("maxLength"):(Y.on(g,"keydown",X.keydownEvent),Y.on(g,"keypress",X.keypressEvent)),Y.on(g,"input",X.inputFallBackEvent),Y.on(g,"compositionend",X.compositionendEvent)),Y.on(g,"setvalue",X.setValueEvent),d=R().join("");var i=(g.inputmask.shadowRoot||o).activeElement;if(""!==g.inputmask._valueGet(!0)||!1===s.clearMaskOnLostFocus||i===g){ue(g,g.inputmask._valueGet(!0));var r=I().slice();!1===oe(r)&&s.clearIncomplete&&E(),s.clearMaskOnLostFocus&&i!==g&&(-1===M()?r=[]:re(r)),(!1===s.clearMaskOnLostFocus||s.showMaskOnFocus&&i===g||""!==g.inputmask._valueGet(!0))&&Q(g,r),i===g&&ne(g,U(M()))}}}(g);break;case"format":return J=(a.isFunction(s.onBeforeMask)&&s.onBeforeMask.call(v,t.value,s)||t.value).split(""),ee.call(this,void 0,!0,!1,J),t.metadata?{value:k?I().slice().reverse().join(""):I().join(""),metadata:e.call(this,{action:"getmetadata"},i,s)}:k?I().slice().reverse().join(""):I().join("");case"isValid":t.value?(J=(a.isFunction(s.onBeforeMask)&&s.onBeforeMask.call(v,t.value,s)||t.value).split(""),ee.call(this,void 0,!0,!1,J)):t.value=k?I().slice().reverse().join(""):I().join("");for(var le=I(),ce=ae(),pe=le.length-1;ce=e.day)&&t}(m,f))&&function(e,t){var i=!0;if(t.min){if(e.rawyear){var n=e.rawyear.replace(/[^0-9]/g,"");i=t.min.year.substr(0,n.length)<=n}e.year===e.rawyear&&t.min.date.getTime()==t.min.date.getTime()&&(i=t.min.date.getTime()<=e.date.getTime())}return i&&t.max&&t.max.date.getTime()==t.max.date.getTime()&&(i=t.max.date.getTime()>=e.date.getTime()),i}(m,a)),t&&f&&n.pos!==t?{buffer:p(a.inputFormat,m,a).split(""),refreshFromBuffer:{start:t,end:n.pos}}:f},onKeyDown:function(e,t,i,n){e.ctrlKey&&e.keyCode===o.RIGHT&&(this.inputmask._valueSet(m(new Date,n)),r(this).trigger("setvalue"))},onUnMask:function(e,t,i){return t?p(i.outputFormat,d(e,i.inputFormat,i),i,!0):t},casing:function(e,t,i,n){return 0==t.nativeDef.indexOf("[ap]")?e.toLowerCase():0==t.nativeDef.indexOf("[AP]")?e.toUpperCase():e},onBeforeMask:function(e,t){return"[object Date]"===Object.prototype.toString.call(e)&&(e=m(e,t)),e},insertMode:!1,shiftPositions:!1,keepStatic:!1,inputmode:"numeric"}}),e.exports=a},function(e,t,i){"use strict";var n=i(1),a=n.dependencyLib,r=i(0);function o(e,t){for(var i="",a=0;am&&s.end<=m)return i===r.radixPoint?{insert:{pos:m+1,c:"0",fromIsValid:!0},rewritePosition:m}:{rewritePosition:m+1};if(s.begin=r.min.toString().length||u<0))return!1;if(null!==r.max&&u>r.max)return!1}return n},onUnMask:function(e,t,i){if(""===t&&!0===i.nullable)return t;var a=e.replace(i.prefix,"");return a=(a=a.replace(i.suffix,"")).replace(new RegExp(n.escapeRegex(i.groupSeparator),"g"),""),""!==i.placeholder.charAt(0)&&(a=a.replace(new RegExp(i.placeholder.charAt(0),"g"),"0")),i.unmaskAsNumber?(""!==i.radixPoint&&-1!==a.indexOf(i.radixPoint)&&(a=a.replace(n.escapeRegex.call(this,i.radixPoint),".")),a=(a=a.replace(new RegExp("^"+n.escapeRegex(i.negationSymbol.front)),"-")).replace(new RegExp(n.escapeRegex(i.negationSymbol.back)+"$"),""),Number(a)):a},isComplete:function(e,t){var i=(t.numericInput?e.slice().reverse():e).join("");return i=(i=(i=(i=(i=i.replace(new RegExp("^"+n.escapeRegex(t.negationSymbol.front)),"-")).replace(new RegExp(n.escapeRegex(t.negationSymbol.back)+"$"),"")).replace(t.prefix,"")).replace(t.suffix,"")).replace(new RegExp(n.escapeRegex(t.groupSeparator)+"([0-9]{3})","g"),"$1"),","===t.radixPoint&&(i=i.replace(n.escapeRegex(t.radixPoint),".")),isFinite(i)},onBeforeMask:function(e,t){var i=t.radixPoint||",";isFinite(t.digits)&&(t.digits=parseInt(t.digits)),"number"!=typeof e&&"number"!==t.inputType||""===i||(e=e.toString().replace(".",i));var a=e.split(i),r=a[0].replace(/[^\-0-9]/g,""),o=1t.max&&(e=t.max.toString().replace(".",i))}return s(e.toString().split(""),l,t,u).join("")},onBeforeWrite:function(e,t,i,r){function o(e,t){if(!1!==r.__financeInput||t){var i=a.inArray(r.radixPoint,e);-1!==i&&e.splice(i,1)}if(""!==r.groupSeparator)for(;-1!==(i=e.indexOf(r.groupSeparator));)e.splice(i,1);return e}var u,l=function(e,t){var i=new RegExp("(^"+(""!==t.negationSymbol.front?n.escapeRegex(t.negationSymbol.front)+"?":"")+n.escapeRegex(t.prefix)+")(.*)("+n.escapeRegex(t.suffix)+(""!=t.negationSymbol.back?n.escapeRegex(t.negationSymbol.back)+"?":"")+"$)").exec(e.slice().reverse().join("")),a=i?i[2]:"",r=!1;return a&&(a=a.split(t.radixPoint.charAt(0))[0],r=new RegExp("^[0"+t.groupSeparator+"]*").exec(a)),!(!r||!(1=o.length?o.length:i.begin]),!1}else if(-1!==l&&(i.begin=o.length?l+1:i.begin]),!1}}}},currency:{prefix:"",groupSeparator:",",alias:"numeric",digits:2,digitsOptional:!1},decimal:{alias:"numeric"},integer:{alias:"numeric",digits:0},percentage:{alias:"numeric",min:0,max:100,suffix:" %",digits:0,allowMinus:!1},indianns:{alias:"numeric",_mask:function(e){return"("+e.groupSeparator+"99){*|1}("+e.groupSeparator+"999){1|1}"},groupSeparator:",",radixPoint:".",placeholder:"0",digits:2,digitsOptional:!1}}),e.exports=n},function(e,t,i){"use strict";var n,a=(n=i(1))&&n.__esModule?n:{default:n};function r(e){return(r="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 o(e,t){return!t||"object"!==r(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function s(e){var t="function"==typeof Map?new Map:void 0;return(s=function(e){if(null===e||(i=e,-1===Function.toString.call(i).indexOf("[native code]")))return e;var i;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return u(e,arguments,c(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),l(n,e)})(e)}function u(e,t,i){return(u=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}()?Reflect.construct:function(e,t,i){var n=[null];n.push.apply(n,t);var a=new(Function.bind.apply(e,n));return i&&l(a,i.prototype),a}).apply(null,arguments)}function l(e,t){return(l=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function c(e){return(c=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}if(document.head.createShadowRoot||document.head.attachShadow){var p=function(e){function t(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=(e=o(this,c(t).call(this))).getAttributeNames(),n=e.attachShadow({mode:"closed"}),r=document.createElement("input");for(var s in r.type="text",n.appendChild(r),i)Object.prototype.hasOwnProperty.call(i,s)&&r.setAttribute("data-inputmask-"+i[s],e.getAttribute(i[s]));return(new a.default).mask(r),r.inputmask.shadowRoot=n,e}return 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&&l(e,t)}(t,s(HTMLElement)),t}();customElements.define("input-mask",p)}},function(e,t,i){"use strict";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)}var a=i(3),r=i(1);void 0===a.fn.inputmask&&(a.fn.inputmask=function(e,t){var i,o=this[0];if(void 0===t&&(t={}),"string"==typeof e)switch(e){case"unmaskedvalue":return o&&o.inputmask?o.inputmask.unmaskedvalue():a(o).val();case"remove":return this.each(function(){this.inputmask&&this.inputmask.remove()});case"getemptymask":return o&&o.inputmask?o.inputmask.getemptymask():"";case"hasMaskedValue":return!(!o||!o.inputmask)&&o.inputmask.hasMaskedValue();case"isComplete":return!o||!o.inputmask||o.inputmask.isComplete();case"getmetadata":return o&&o.inputmask?o.inputmask.getmetadata():void 0;case"setvalue":r.setValue(o,t);break;case"option":if("string"!=typeof t)return this.each(function(){if(void 0!==this.inputmask)return this.inputmask.option(t)});if(o&&void 0!==o.inputmask)return o.inputmask.option(t);break;default:return t.alias=e,i=new r(t),this.each(function(){i.mask(this)})}else{if(Array.isArray(e))return t.alias=e,i=new r(t),this.each(function(){i.mask(this)});if("object"==n(e))return i=new r(e),void 0===e.mask&&void 0===e.alias?this.each(function(){if(void 0!==this.inputmask)return this.inputmask.option(e);i.mask(this)}):this.each(function(){i.mask(this)});if(void 0===e)return this.each(function(){(i=new r(t)).mask(this)})}})},function(e,t,i){"use strict";var n=i(6),a=i(3);n.dependencyLib===a&&i(12),e.exports=n}],installedModules={},__webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(e,t,i){__webpack_require__.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},__webpack_require__.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},__webpack_require__.t=function(e,t){if(1&t&&(e=__webpack_require__(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(__webpack_require__.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)__webpack_require__.d(i,n,function(t){return e[t]}.bind(null,n));return i},__webpack_require__.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return __webpack_require__.d(t,"a",t),t},__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=13);function __webpack_require__(e){if(installedModules[e])return installedModules[e].exports;var t=installedModules[e]={i:e,l:!1,exports:{}};return modules[e].call(t.exports,t,t.exports,__webpack_require__),t.l=!0,t.exports}var modules,installedModules}); +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5pbnB1dG1hc2suanMiXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwicmVxdWlyZSIsImRlZmluZSIsImFtZCIsImEiLCJqUXVlcnkiLCJpIiwid2luZG93IiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fM19fIiwibW9kdWxlcyIsIkpTT04iLCJwYXJzZSIsIl9fd2VicGFja19yZXF1aXJlX18iLCJfdHlwZW9mIiwib2JqIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIiQiLCJkb2N1bWVudCIsImdlbmVyYXRlTWFza1NldCIsImFuYWx5c2VNYXNrIiwibWFza1Njb3BlIiwiSW5wdXRtYXNrIiwiYWxpYXMiLCJvcHRpb25zIiwiaW50ZXJuYWwiLCJ0aGlzIiwiZWwiLCJldmVudHMiLCJtYXNrc2V0IiwicmVmcmVzaFZhbHVlIiwiaXNQbGFpbk9iamVjdCIsIm9wdHMiLCJleHRlbmQiLCJkZWZhdWx0cyIsIm5vTWFza3NDYWNoZSIsImRlZmluaXRpb25zIiwidXNlck9wdGlvbnMiLCJyZXNvbHZlQWxpYXMiLCJpc1JUTCIsIm51bWVyaWNJbnB1dCIsImFsaWFzU3RyIiwiYWxpYXNEZWZpbml0aW9uIiwiYWxpYXNlcyIsIm1hc2siLCJkYXRhQXR0cmlidXRlIiwiX21heFRlc3RQb3MiLCJwbGFjZWhvbGRlciIsIm9wdGlvbmFsbWFya2VyIiwicXVhbnRpZmllcm1hcmtlciIsImdyb3VwbWFya2VyIiwiYWx0ZXJuYXRvcm1hcmtlciIsImVzY2FwZUNoYXIiLCJyZWdleCIsIm9uY29tcGxldGUiLCJub29wIiwib25pbmNvbXBsZXRlIiwib25jbGVhcmVkIiwicmVwZWF0IiwiZ3JlZWR5IiwiYXV0b1VubWFzayIsInJlbW92ZU1hc2tPblN1Ym1pdCIsImNsZWFyTWFza09uTG9zdEZvY3VzIiwiaW5zZXJ0TW9kZSIsImluc2VydE1vZGVWaXN1YWwiLCJjbGVhckluY29tcGxldGUiLCJvbktleURvd24iLCJvbkJlZm9yZU1hc2siLCJvbkJlZm9yZVBhc3RlIiwicGFzdGVkVmFsdWUiLCJpc0Z1bmN0aW9uIiwiY2FsbCIsIm9uQmVmb3JlV3JpdGUiLCJvblVuTWFzayIsInNob3dNYXNrT25Gb2N1cyIsInNob3dNYXNrT25Ib3ZlciIsIm9uS2V5VmFsaWRhdGlvbiIsInNraXBPcHRpb25hbFBhcnRDaGFyYWN0ZXIiLCJyaWdodEFsaWduIiwidW5kb09uRXNjYXBlIiwicmFkaXhQb2ludCIsIl9yYWRpeERhbmNlIiwiZ3JvdXBTZXBhcmF0b3IiLCJrZWVwU3RhdGljIiwicG9zaXRpb25DYXJldE9uVGFiIiwidGFiVGhyb3VnaCIsInN1cHBvcnRzSW5wdXRUeXBlIiwiaWdub3JhYmxlcyIsImlzQ29tcGxldGUiLCJwcmVWYWxpZGF0aW9uIiwicG9zdFZhbGlkYXRpb24iLCJzdGF0aWNEZWZpbml0aW9uU3ltYm9sIiwiaml0TWFza2luZyIsIm51bGxhYmxlIiwiaW5wdXRFdmVudE9ubHkiLCJub1ZhbHVlUGF0Y2hpbmciLCJwb3NpdGlvbkNhcmV0T25DbGljayIsImNhc2luZyIsImlucHV0bW9kZSIsImltcG9ydERhdGFBdHRyaWJ1dGVzIiwic2hpZnRQb3NpdGlvbnMiLCI5IiwidmFsaWRhdG9yIiwiZGVmaW5pdGlvblN5bWJvbCIsIioiLCJtYXNrc0NhY2hlIiwiZWxlbXMiLCJ0aGF0IiwiZ2V0RWxlbWVudEJ5SWQiLCJxdWVyeVNlbGVjdG9yQWxsIiwibm9kZU5hbWUiLCJlYWNoIiwibmR4Iiwic2NvcGVkT3B0cyIsIm5wdCIsImltcG9ydE9wdGlvbiIsIm9wdGlvbiIsIm9wdGlvbkRhdGEiLCJnZXRBdHRyaWJ1dGUiLCJpbmRleE9mIiwiZGF0YW9wdGlvbnMiLCJwIiwiYXR0ck9wdGlvbnMiLCJyZXBsYWNlIiwidG9Mb3dlckNhc2UiLCJkaXIiLCJzdHlsZSIsInRleHRBbGlnbiIsInJlbW92ZUF0dHJpYnV0ZSIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJpbXBvcnRBdHRyaWJ1dGVPcHRpb25zIiwiaW5wdXRtYXNrIiwicmVtb3ZlIiwiZGF0YSIsImFjdGlvbiIsIm5vcmVtYXNrIiwidW5tYXNrZWR2YWx1ZSIsInZhbHVlIiwiZ2V0ZW1wdHltYXNrIiwiaGFzTWFza2VkVmFsdWUiLCJnZXRtZXRhZGF0YSIsImlzVmFsaWQiLCJmb3JtYXQiLCJtZXRhZGF0YSIsInNldFZhbHVlIiwidHJpZ2dlciIsImV4dGVuZERlZmF1bHRzIiwiZXh0ZW5kRGVmaW5pdGlvbnMiLCJkZWZpbml0aW9uIiwiZXh0ZW5kQWxpYXNlcyIsInVubWFzayIsImVzY2FwZVJlZ2V4UmVnZXgiLCJSZWdFeHAiLCJqb2luIiwiZXNjYXBlUmVnZXgiLCJzdHIiLCJkZXBlbmRlbmN5TGliIiwianF1ZXJ5IiwiX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18iLCJldmFsIiwibm9jYWNoZSIsImdlbmVyYXRlTWFzayIsIm1hc2tzZXREZWZpbml0aW9uIiwibWFza2RlZktleSIsInJlZ2V4TWFzayIsInJlcGVhdFN0YXJ0Iiwic3BsaXQiLCJyZXZlcnNlIiwibWFza1Rva2VuIiwidmFsaWRQb3NpdGlvbnMiLCJfYnVmZmVyIiwiYnVmZmVyIiwidGVzdHMiLCJleGNsdWRlcyIsIm1hc2tMZW5ndGgiLCJqaXRPZmZzZXQiLCJpc0FycmF5IiwiYWx0TWFzayIsIm1zayIsInBvcCIsIm1hdGNoIiwibSIsIm9wZW5pbmdUb2tlbiIsImN1cnJlbnRPcGVuaW5nVG9rZW4iLCJhbHRlcm5hdG9yIiwibGFzdE1hdGNoIiwidG9rZW5pemVyIiwicmVnZXhUb2tlbml6ZXIiLCJlc2NhcGVkIiwiY3VycmVudFRva2VuIiwiTWFza1Rva2VuIiwib3BlbmVuaW5ncyIsIm1hc2tUb2tlbnMiLCJjbG9zZVJlZ2V4R3JvdXAiLCJpc0dyb3VwIiwiaXNPcHRpb25hbCIsImlzUXVhbnRpZmllciIsImlzQWx0ZXJuYXRvciIsIm1hdGNoZXMiLCJvcGVuR3JvdXAiLCJhbHRlcm5hdG9yR3JvdXAiLCJxdWFudGlmaWVyIiwibWluIiwibWF4IiwiaW5zZXJ0VGVzdERlZmluaXRpb24iLCJtdG9rZW4iLCJlbGVtZW50IiwicG9zaXRpb24iLCJwcmV2TWF0Y2giLCJ0ZXN0Iiwic3BsaWNlIiwiZm4iLCJzdGF0aWMiLCJvcHRpb25hbGl0eSIsIm5ld0Jsb2NrTWFya2VyIiwiZGVmIiwibmF0aXZlRGVmIiwibG1udCIsIm1hc2tkZWYiLCJnZW5lcmF0ZWQiLCJkZWZhdWx0Q2FzZSIsIm1uZHgiLCJwdXNoIiwiZ3JvdXBpZnkiLCJncm91cFRva2VuIiwiY2xvc2VHcm91cCIsImdyb3VwUXVhbnRpZmllciIsImV4ZWMiLCJjaGFyQXQiLCJhbHRSZWdleEdyb3VwIiwibXFqIiwibXEiLCJtcTAiLCJpc05hTiIsInBhcnNlSW50IiwibXExIiwiaml0IiwidG1wTWF0Y2giLCJzdWJUb2tlbiIsInZlcmlmeUdyb3VwTWFya2VyIiwidG9rZW4iLCJuZXh0VG9rZW4iLCJyZXZlcnNlVG9rZW5zIiwiaGFzT3duUHJvcGVydHkiLCJpbnRNYXRjaCIsInF0Iiwic3QiLCJBIiwiJiIsIiMiLCJpcFZhbGlkYXRvclJlZ2V4IiwiaXBWYWxpZGF0b3IiLCJjaHJzIiwicG9zIiwic3RyaWN0IiwiY3NzdW5pdCIsInVybCIsImlwIiwiaiIsImsiLCJsIiwibWFza2VkVmFsdWUiLCJ1bm1hc2tlZFZhbHVlIiwiZW1haWwiLCItIiwibWFjIiwidmluIiwiViIsInNzbiIsImMiLCJjdXJyZW50UmVzdWx0IiwidWEiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJpZSIsIm1vYmlsZSIsImllbW9iaWxlIiwiaXBob25lIiwia2V5Q29kZSIsImFjdGlvbk9iaiIsInVuZG9WYWx1ZSIsIiRlbCIsIm1heExlbmd0aCIsInNraXBLZXlQcmVzc0V2ZW50Iiwic2tpcElucHV0RXZlbnQiLCJ2YWxpZGF0aW9uRXZlbnQiLCJpZ25vcmFibGUiLCJtb3VzZUVudGVyIiwib3JpZ2luYWxQbGFjZWhvbGRlciIsImdldE1hc2tUZW1wbGF0ZSIsImJhc2VPbklucHV0IiwibWluaW1hbFBvcyIsImluY2x1ZGVNb2RlIiwibm9KaXQiLCJjbGVhck9wdGlvbmFsVGFpbCIsIm5keEludGx6ciIsInRlc3RQb3MiLCJqaXRSZW5kZXJTdGF0aWMiLCJtYXNrVGVtcGxhdGUiLCJnZW5lcmF0ZWRJbnB1dCIsImlucHV0IiwiZGV0ZXJtaW5lVGVzdFRlbXBsYXRlIiwiZ2V0VGVzdHMiLCJsb2NhdG9yIiwic2xpY2UiLCJnZXRQbGFjZWhvbGRlciIsImdldFRlc3RUZW1wbGF0ZSIsImlzRmluaXRlIiwicmVzZXRNYXNrU2V0Iiwic29mdCIsImdldExhc3RWYWxpZFBvc2l0aW9uIiwiY2xvc2VzdFRvIiwiYmVmb3JlIiwiYWZ0ZXIiLCJ2YWxpZHMiLCJwb3NOZHgiLCJwc05keCIsImdldERlY2lzaW9uVGFrZXIiLCJ0c3QiLCJkZWNpc2lvblRha2VyIiwiYWx0ZXJuYXRpb24iLCJ0b1N0cmluZyIsImdldExvY2F0b3IiLCJhbGlnbiIsIm1sb2MiLCJ0c3RMb2NhdG9yIiwiY2xvc2VzdCIsImJlc3RNYXRjaCIsInRhcmdldExvY2F0b3IiLCJnZXRUZXN0IiwiZGlzdGFuY2UiLCJNYXRoIiwiYWJzIiwib3B0aW9uYWxRdWFudGlmaWVyIiwidHN0UHMiLCJwb3NpdGlvbkNhbk1hdGNoRGVmaW5pdGlvbiIsInRlc3REZWZpbml0aW9uIiwidmFsaWQiLCJ0bmR4IiwibGF0ZXN0TWF0Y2giLCJuZHhJbml0aWFsaXplciIsImluc2VydFN0b3AiLCJjYWNoZURlcGVuZGVuY3kiLCJyZXNvbHZlVGVzdEZyb21Ub2tlbiIsImxvb3BOZHgiLCJxdWFudGlmaWVyUmVjdXJzZSIsImhhbmRsZU1hdGNoIiwiaXNGaXJzdE1hdGNoIiwidG9rZW5Hcm91cCIsImZpcnN0TWF0Y2giLCJpbkFycmF5IiwicmVzb2x2ZU5keEluaXRpYWxpemVyIiwiYWx0ZXJuYXRlTmR4IiwidGFyZ2V0QWx0ZXJuYXRpb24iLCJpbmRleFBvcyIsIm5keFBvcyIsImJlc3RNYXRjaEFsdEluZGV4IiwiaXNTdWJzZXRPZiIsInNvdXJjZSIsInRhcmdldCIsImV4cGFuZCIsInBhdHRlcm4iLCJlbmQiLCJleHBhbmRlZCIsInN0YXJ0IiwiY2hhckNvZGVBdCIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsInNldE1lcmdlTG9jYXRvcnMiLCJ0YXJnZXRNYXRjaCIsImFsdE1hdGNoIiwiYWx0ZXJuYXRpb25OZHgiLCJzaG91bGRNZXJnZSIsImxvY05keCIsImlzU2FtZUxldmVsIiwiY2QiLCJvcHRpb25hbFRva2VuIiwibXRjaHNOZHgiLCJtdGNoIiwibWFsdE1hdGNoZXMiLCJhbHRlcm5hdGVUb2tlbiIsIm1hbHRlcm5hdGVNYXRjaGVzIiwiY3VycmVudE1hdGNoZXMiLCJsb29wTmR4Q250IiwiYWx0SW5kZXgiLCJzaGlmdCIsImFtbmR4IiwiY3VycmVudFBvcyIsIm5keEluaXRpYWxpemVyQ2xvbmUiLCJhbHRJbmRleEFyciIsImFsdEluZGV4QXJyQ2xvbmUiLCJleGwiLCJleGNsdWRlU2V0IiwidW5NYXRjaGVkQWx0ZXJuYXRpb24iLCJjb25jYXQiLCJuZHgxIiwiZHJvcE1hdGNoIiwibmR4MiIsImFsdE1hdGNoMiIsInFuZHgiLCJwcmV2aW91c1BvcyIsIm1lcmdlTG9jYXRvcnMiLCJtdG5keCIsImdldEJ1ZmZlclRlbXBsYXRlIiwiZ2V0QnVmZmVyIiwibm9DYWNoZSIsInJlZnJlc2hGcm9tQnVmZmVyIiwiYmZmciIsImRldGVybWluZU5ld0NhcmV0UG9zaXRpb24iLCJiZWdpbiIsImtleXByZXNzIiwiRXZlbnQiLCJ3aGljaCIsInZhbFJlc3VsdCIsIkV2ZW50SGFuZGxlcnMiLCJrZXlwcmVzc0V2ZW50IiwiZm9yd2FyZFBvc2l0aW9uIiwiZWxlbSIsInRvVXBwZXJDYXNlIiwicG9zQmVmb3JlIiwiU1BBQ0UiLCJhcmdzIiwiQXJyYXkiLCJhcmd1bWVudHMiLCJhcHBseSIsImNoZWNrQWx0ZXJuYXRpb25NYXRjaCIsImFsdEFycjEiLCJhbHRBcnIyIiwibmEiLCJuYU5keCIsImFsdEFyckMiLCJpc01hdGNoIiwibmFBcnIiLCJhbG5keCIsImFsdGVybmF0ZSIsIm1hc2tQb3MiLCJmcm9tSXNWYWxpZCIsInJBbHRQb3MiLCJzZWxlY3Rpb24iLCJsYXN0QWx0IiwiYWx0UG9zIiwicHJldkFsdFBvcyIsInZhbGlkUG9zIiwiZGVjaXNpb25Qb3MiLCJ2YWxpZFBzQ2xvbmUiLCJ0c3RDbG9uZSIsImlzVmFsaWRSc2x0IiwicmV0dXJuUnNsdCIsImxBbHRQb3MiLCJ2YWxpZElucHV0cyIsInJlc3VsdFBvcyIsImNhcmV0IiwiY2FyZXRQb3MiLCJmcm9tQWx0ZXJuYXRlIiwidmFsaWRhdGVPbmx5IiwiaXNTZWxlY3Rpb24iLCJwb3NPYmoiLCJwcm9jZXNzQ29tbWFuZE9iamVjdCIsImNvbW1hbmRPYmoiLCJzb3J0IiwiYiIsInJldmFsaWRhdGVNYXNrIiwiaW5zZXJ0IiwicmVmcmVzaCIsInJld3JpdGVQb3NpdGlvbiIsIl9pc1ZhbGlkIiwicnNsdCIsInZhbGlkYXRlZFBvcyIsInJlc3VsdCIsInBvc2l0aW9uc0Nsb25lIiwiY3VycmVudFBvc1ZhbGlkIiwic2Vla05leHQiLCJza2lwIiwiaXNNYXNrIiwiblBvcyIsInNuUG9zIiwidHJhY2tiYWNrUG9zaXRpb25zIiwicG9zdFJlc3VsdCIsIm9yaWdpbmFsUG9zIiwibmV3UG9zIiwiZmlsbE9ubHkiLCJwcyIsIm5wIiwiY3ZwSW5wdXQiLCJ2YWxpZFRlc3QiLCJJc0VuY2xvc2VkU3RhdGljIiwicG9zTWF0Y2giLCJuZXh0TWF0Y2giLCJvZmZzZXQiLCJsdnAiLCJ0IiwiY2FuTWF0Y2giLCJmdXp6eSIsInRlc3RUZW1wbGF0ZSIsInRlc3RQbGFjZUhvbGRlciIsIm5ld0Jsb2NrIiwic2Vla1ByZXZpb3VzIiwid3JpdGVCdWZmZXIiLCJldmVudCIsInRyaWdnZXJFdmVudHMiLCJfdmFsdWVTZXQiLCJ0eXBlIiwiREVMRVRFIiwiQkFDS1NQQUNFIiwiJGlucHV0IiwibnB0VmFsIiwiX3ZhbHVlR2V0Iiwic2V0VGltZW91dCIsInJldHVyblBMIiwicHJldlRlc3QiLCJzdGF0aWNBbHRlcm5hdGlvbnMiLCJIYW5kbGVOYXRpdmVQbGFjZWhvbGRlciIsIm5wdFZhbHVlIiwic2VsZWN0ZWRDYXJldCIsInRhYmJlZCIsImNsaWNrUG9zIiwiZGlnaXRzIiwidnBzIiwicmFkaXhQb3MiLCJ2cCIsImRvUmFkaXhGb2N1cyIsImNsaWNrUG9zaXRpb24iLCJsdmNsaWNrUG9zaXRpb24iLCJsYXN0UG9zaXRpb24iLCJ0dCIsInZhbHVlQnVmZmVyIiwiRXZlbnRSdWxlciIsIm9uIiwiZXZlbnROYW1lIiwiZXZlbnRIYW5kbGVyIiwiZXYiLCJlIiwib3JpZ2luYWxFdmVudCIsImltT3B0cyIsIm9mZiIsImRpc2FibGVkIiwicmVhZE9ubHkiLCJjdHJsS2V5IiwiVEFCIiwiaW5wdXRUeXBlIiwicHJldmVudERlZmF1bHQiLCJibHVyIiwiZm9jdXMiLCJyZXR1cm5WYWwiLCJzdG9wUHJvcGFnYXRpb24iLCJmb3JtIiwiZXZBcnIiLCJrZXlkb3duRXZlbnQiLCJrZFJlc3VsdCIsIkJBQ0tTUEFDRV9TQUZBUkkiLCJYIiwiaGFuZGxlUmVtb3ZlIiwiRU5EIiwiUEFHRV9ET1dOIiwic2hpZnRLZXkiLCJIT01FIiwiUEFHRV9VUCIsIkVTQ0FQRSIsImFsdEtleSIsImNoZWNrVmFsIiwiUklHSFQiLCJMRUZUIiwiY2FyZXRQb3NfYmVnaW4iLCJ0cmFuc2xhdGVQb3NpdGlvbiIsImNoZWNrdmFsIiwid3JpdGVPdXQiLCJjaGFyQ29kZSIsIm1ldGFLZXkiLCJFTlRFUiIsImxvY2F0aW9uIiwid3JpdGVPdXRCdWZmZXIiLCJwYXN0ZUV2ZW50IiwidGVtcFZhbHVlIiwiaW5wdXRWYWx1ZSIsInZhbHVlQmVmb3JlQ2FyZXQiLCJzdWJzdHIiLCJ2YWx1ZUFmdGVyQ2FyZXQiLCJjbGlwYm9hcmREYXRhIiwiZ2V0RGF0YSIsInBhc3RlVmFsdWUiLCJpbnB1dEZhbGxCYWNrRXZlbnQiLCJjaGFuZ2VzIiwiYmwiLCJmcm9udFBhcnQiLCJiYWNrUGFydCIsImZyb250QnVmZmVyUGFydCIsImJhY2tCdWZmZXJQYXJ0IiwiZnBsIiwiYnBsIiwidW5zaGlmdCIsIm5ld0J1ZmZlciIsIm9sZEJ1ZmZlciIsImFuYWx5c2VDaGFuZ2VzIiwiaW5wdXRDaGFyIiwiaXYiLCJpZU1vYmlsZUhhbmRsZXIiLCJzaGFkb3dSb290IiwiYWN0aXZlRWxlbWVudCIsImVudHJ5Iiwia2V5ZG93biIsImFwcGx5SW5wdXRWYWx1ZSIsImNvbXBvc2l0aW9uZW5kRXZlbnQiLCJzZXRWYWx1ZUV2ZW50IiwiYXJndW1lbnRfMSIsImFyZ3VtZW50XzIiLCJkZXRhaWwiLCJmb2N1c0V2ZW50IiwiY2xpY2tFdmVudCIsImludmFsaWRFdmVudCIsIm1vdXNlbGVhdmVFdmVudCIsIm5ld0NhcmV0UG9zaXRpb24iLCJjdXRFdmVudCIsImNsaXBEYXRhIiwic2V0RGF0YSIsImV4ZWNDb21tYW5kIiwiYmx1ckV2ZW50IiwibW91c2VlbnRlckV2ZW50Iiwic3VibWl0RXZlbnQiLCJyZXNldEV2ZW50IiwibnB0dmwiLCJpbml0aWF0aW5nRXZlbnQiLCJjaGFyQ29kZXMiLCJpbml0aWFsTmR4Iiwic3RhdGljTWF0Y2hlcyIsInByZXZDYXJldFBvcyIsInRhcmdldFRlbXBsYXRlIiwiY2hhckNvZGVOZHgiLCJuZXh0UG9zIiwiaXNUZW1wbGF0ZU1hdGNoIiwic25keCIsIm5leHRWYWxpZCIsIm5leHRTbmR4Iiwidm5keCIsInVtVmFsdWUiLCJwbmR4IiwiYnVmZmVyVmFsdWUiLCJub3RyYW5zbGF0ZSIsImlzRGVsZXRlIiwicmFuZ2UiLCJzZWxlY3Rpb25TdGFydCIsInNlbGVjdGlvbkVuZCIsImdldFNlbGVjdGlvbiIsImdldFJhbmdlQXQiLCJjb21tb25BbmNlc3RvckNvbnRhaW5lciIsInBhcmVudE5vZGUiLCJzdGFydE9mZnNldCIsImVuZE9mZnNldCIsImNyZWF0ZVJhbmdlIiwiZHVwbGljYXRlIiwibW92ZVN0YXJ0IiwidGV4dCIsInNjcm9sbENhbGMiLCJvd25lckRvY3VtZW50IiwiZGVmYXVsdFZpZXciLCJnZXRDb21wdXRlZFN0eWxlIiwiY3VycmVudFN0eWxlIiwiZm9udFNpemUiLCJzY3JvbGxMZWZ0Iiwic2Nyb2xsV2lkdGgiLCJzZXRTZWxlY3Rpb25SYW5nZSIsImZpcnN0Q2hpbGQiLCJ0ZXh0Tm9kZSIsImNyZWF0ZVRleHROb2RlIiwiYXBwZW5kQ2hpbGQiLCJzZXRTdGFydCIsInNldEVuZCIsImNvbGxhcHNlIiwic2VsIiwicmVtb3ZlQWxsUmFuZ2VzIiwiYWRkUmFuZ2UiLCJjcmVhdGVUZXh0UmFuZ2UiLCJtb3ZlRW5kIiwic2VsZWN0IiwiZGV0ZXJtaW5lTGFzdFJlcXVpcmVkUG9zaXRpb24iLCJyZXR1cm5EZWZpbml0aW9uIiwicG9zaXRpb25zIiwibHZUZXN0IiwibHZUZXN0QWx0IiwidGVtcGxhdGUiLCJjb21wbGV0ZSIsImxycCIsImFtbCIsInBlbmQiLCJpc1N1cHBvcnRlZCIsInRhZ05hbWUiLCJlbGVtZW50VHlwZSIsImlzQ29udGVudEVkaXRhYmxlIiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsInZhbHVlR2V0IiwidmFsdWVTZXQiLCJnZXR0ZXIiLCJzZXR0ZXIiLCJfX3ZhbHVlR2V0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZ2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJvYmplY3QiLCJ2YWx1ZVByb3BlcnR5IiwiZ2V0Iiwic2V0IiwiZGVmaW5lUHJvcGVydHkiLCJjb25maWd1cmFibGUiLCJ0ZXh0Q29udGVudCIsIl9fbG9va3VwR2V0dGVyX18iLCJfX2xvb2t1cFNldHRlcl9fIiwiX19kZWZpbmVHZXR0ZXJfXyIsIl9fZGVmaW5lU2V0dGVyX18iLCJfX3ZhbHVlU2V0Iiwib3ZlcnJ1bGVSVEwiLCJ2YWxIb29rcyIsImlucHV0bWFza3BhdGNoIiwidmFsaG9va0dldCIsInZhbGhvb2tTZXQiLCJwYXRjaFZhbGhvb2siLCJpbnN0YWxsTmF0aXZlVmFsdWVTZXRGYWxsYmFjayIsInBhdGNoVmFsdWVQcm9wZXJ0eSIsImlzRWxlbWVudFR5cGVTdXBwb3J0ZWQiLCJpbnB1dE1vZGUiLCJhdXRvY29tcGxldGUiLCJybCIsImxtaWIiLCJjdiIsIm1hc2tUYXJnZXQiLCJtdGR0IiwiZm9ybWF0Q29kZSIsImQiLCJEYXRlIiwic2V0RGF0ZSIsImdldERhdGUiLCJkZCIsInBhZCIsImRkZCIsImRkZGQiLCJzZXRNb250aCIsImdldE1vbnRoIiwibW0iLCJtbW0iLCJtbW1tIiwieXkiLCJzZXRGdWxsWWVhciIsImdldEZ1bGxZZWFyIiwieXl5eSIsImgiLCJzZXRIb3VycyIsImdldEhvdXJzIiwiaGgiLCJoeCIsIngiLCJIIiwiSEgiLCJIeCIsIk0iLCJzZXRNaW51dGVzIiwiZ2V0TWludXRlcyIsIk1NIiwicyIsInNldFNlY29uZHMiLCJnZXRTZWNvbmRzIiwic3MiLCJzZXRNaWxsaXNlY29uZHMiLCJnZXRNaWxsaXNlY29uZHMiLCJMIiwiVCIsIlRUIiwiWiIsIm8iLCJTIiwiZm9ybWF0QWxpYXMiLCJpc29EYXRlIiwiaXNvVGltZSIsImlzb0RhdGVUaW1lIiwiaXNvVXRjRGF0ZVRpbWUiLCJmb3JtYXRjb2RlIiwiZHluTWF0Y2hlcyIsImZjb2RlIiwiZ2V0VG9rZW5pemVyIiwidG9rZW5zIiwiZHludG9rZW5zIiwiZHluVG9rZW4iLCJkYXRlT2JqVmFsdWUiLCJyYXciLCJsYXN0SW5kZXgiLCJkYXRlIiwidmFsIiwibGVuIiwibWFza1N0cmluZyIsInRhcmdldFByb3AiLCJkYXRlT3BlcmF0aW9uIiwiZGF0ZU9iaiIsImV4dGVuZFByb3BlcnR5IiwiaW1wb3J0RGF0ZSIsImlucHV0Rm9ybWF0IiwiZ2V0WWVhciIsImdldFRva2VuTWF0Y2giLCJjYWxjUG9zIiwibWF0Y2hMZW5ndGgiLCJ0YXJnZXRNYXRjaEluZGV4IiwiZGF0ZXRpbWUiLCJpMThuIiwib3JkaW5hbFN1ZmZpeCIsImRpc3BsYXlGb3JtYXQiLCJvdXRwdXRGb3JtYXQiLCJkYXlOYW1lcyIsIm1vbnRoTmFtZXMiLCJ0b2tlbk1hdGNoIiwicGFydCIsImRhdGVQYXJ0cyIsImdldFRpbWUiLCJyYXdkYXkiLCJkYXkiLCJyYXd5ZWFyIiwicmF3bW9udGgiLCJtb250aCIsImlzVmFsaWREYXRlIiwicmF3WWVhciIsInllYXIiLCJpc0RhdGVJblJhbmdlIiwiaW5pdGlhbFZhbHVlIiwiYXV0b0VzY2FwZSIsInR4dCIsImVzY2FwZWRUeHQiLCJhbGlnbkRpZ2l0cyIsImZvcmNlIiwiZGlnaXRzT3B0aW9uYWwiLCJyYWRpeFBvc2l0aW9uIiwiZmluZFZhbGlkYXRvciIsInN5bWJvbCIsInRzdE5keCIsIm5keGwiLCJmaW5kVmFsaWQiLCJyZXQiLCJkZWNpbWFsVmFsaWRhdG9yIiwibnVtZXJpYyIsImRlY2ltYWxEZWYiLCJyYWRpeFBvaW50RGVmIiwiX19maW5hbmNlSW5wdXQiLCJwcmVmaXgiLCJfbWFzayIsImRxIiwic3VmZml4IiwicGFyc2VNaW5NYXhPcHRpb25zIiwicGFyc2VGbG9hdCIsIk5hTiIsIk51bWJlciIsIk1JTl9WQUxVRSIsIk1BWF9WQUxVRSIsImVuZm9yY2VEaWdpdHNPbkJsdXIiLCJhbGxvd01pbnVzIiwibmVnYXRpb25TeW1ib2wiLCJmcm9udCIsImJhY2siLCJzdGVwIiwidW5tYXNrQXNOdW1iZXIiLCJyb3VuZGluZ0ZOIiwicm91bmQiLCJzaG9ydGN1dHMiLCIwIiwiMSIsIisiLCJpbnNlcnRzIiwiaW5pdFBvcyIsImhhbm5kbGVSYWRpeERhbmNlIiwiaXNOZWdhdGl2ZSIsInVubWFza2VkIiwicHJvY2Vzc1ZhbHVlIiwidmFsdWVQYXJ0cyIsImludGVnZXJQYXJ0IiwiZGVjaW1hbFBhcnQiLCJmb3JjZURpZ2l0cyIsImRpZ2l0c0ZhY3RvciIsInBvdyIsInRvRml4ZWQiLCJzdWJzdHJpbmciLCJudW1iZXJWYWx1ZSIsInN0cmlwQnVmZmVyIiwic3RyaXBSYWRpeCIsImxlYWRpbmd6ZXJvZXMiLCJudW1iZXJNYXRjaGVzIiwibnVtYmVyIiwiY2hlY2tGb3JMZWFkaW5nWmVyb2VzIiwiYnVmIiwiY2FyZXROZHgiLCJuZXdDYXJldFBvcyIsIm5tYnJNdGNocyIsIlVQIiwiRE9XTiIsImN1cnJlbmN5IiwiZGVjaW1hbCIsImludGVnZXIiLCJwZXJjZW50YWdlIiwiaW5kaWFubnMiLCJfaW5wdXRtYXNrIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsInNlbGYiLCJSZWZlcmVuY2VFcnJvciIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJfd3JhcE5hdGl2ZVN1cGVyIiwiQ2xhc3MiLCJfY2FjaGUiLCJNYXAiLCJGdW5jdGlvbiIsIlR5cGVFcnJvciIsImhhcyIsIldyYXBwZXIiLCJfY29uc3RydWN0IiwiX2dldFByb3RvdHlwZU9mIiwiY3JlYXRlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiX3NldFByb3RvdHlwZU9mIiwiUGFyZW50IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsInNoYW0iLCJQcm94eSIsImlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsImluc3RhbmNlIiwiYmluZCIsInNldFByb3RvdHlwZU9mIiwiaGVhZCIsImNyZWF0ZVNoYWRvd1Jvb3QiLCJhdHRhY2hTaGFkb3ciLCJJbnB1dG1hc2tFbGVtZW50IiwiX0hUTUxFbGVtZW50IiwiX3RoaXMiLCJDb25zdHJ1Y3RvciIsIl9jbGFzc0NhbGxDaGVjayIsImF0dHJpYnV0ZU5hbWVzIiwiZ2V0QXR0cmlidXRlTmFtZXMiLCJzaGFkb3ciLCJtb2RlIiwiYXR0ciIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsIl9pbmhlcml0cyIsIkhUTUxFbGVtZW50IiwiY3VzdG9tRWxlbWVudHMiLCJucHRtYXNrIiwiaW0iLCJpbnN0YWxsZWRNb2R1bGVzIiwibmFtZSIsInIiLCJ0b1N0cmluZ1RhZyIsIm5zIiwia2V5IiwibiIsInByb3BlcnR5IiwibW9kdWxlSWQiXSwibWFwcGluZ3MiOiJDQU9DLFNBQTBDQSxFQUFNQyxHQUM3QyxHQUFJLGlCQUFtQkMsU0FBVyxpQkFBbUJDLE9BQVFBLE9BQU9ELFFBQVVELEVBQVFHLFFBQVEsZ0JBQWlCLEdBQUksbUJBQXFCQyxRQUFVQSxPQUFPQyxJQUFLRCxPQUFPLENBQUUsVUFBWUosT0FBZSxDQUM5TCxJQUFJTSxFQUFJLGlCQUFtQkwsUUFBVUQsRUFBUUcsUUFBUSxXQUFhSCxFQUFRRCxFQUFLUSxRQUMvRSxJQUFLLElBQUlDLEtBQUtGLEdBQUksaUJBQW1CTCxRQUFVQSxRQUFVRixHQUFNUyxHQUFLRixFQUFFRSxJQUg3RSxDQUtDQyxPQUFRLFNBQVNDLGdDQUNmLE9BQU9DLFFBQVUsQ0FBRSxTQUFTVCxHQUN4QkEsRUFBT0QsUUFBVVcsS0FBS0MsTUFBTSx1TkFDN0IsU0FBU1gsRUFBUUQsRUFBU2EsR0FDekIsYUFDQSxTQUFTQyxFQUFRQyxHQUNiLE9BQU9ELEVBQVUsbUJBQXFCRSxRQUFVLGlCQUFtQkEsT0FBT0MsU0FBVyxTQUFpQkYsR0FDbEcsY0FBY0EsR0FDZCxTQUFpQkEsR0FDakIsT0FBT0EsR0FBTyxtQkFBcUJDLFFBQVVELEVBQUlHLGNBQWdCRixRQUFVRCxJQUFRQyxPQUFPRyxVQUFZLGdCQUFrQkosSUFDakhBLEdBRWYsSUFBSUssRUFBSVAsRUFBb0IsR0FBSUwsRUFBU0ssRUFBb0IsR0FBSVEsRUFBV2IsRUFBT2EsU0FBVUMsRUFBa0JULEVBQW9CLEdBQUdTLGdCQUFpQkMsRUFBY1YsRUFBb0IsR0FBR1UsWUFBYUMsRUFBWVgsRUFBb0IsR0FDek8sU0FBU1ksRUFBVUMsRUFBT0MsRUFBU0MsR0FDL0IsS0FBTUMsZ0JBQWdCSixHQUFZLE9BQU8sSUFBSUEsRUFBVUMsRUFBT0MsRUFBU0MsR0FDdkVDLEtBQUtDLFFBQUssRUFBUUQsS0FBS0UsT0FBUyxHQUFJRixLQUFLRyxhQUFVLEVBQVFILEtBQUtJLGNBQWUsR0FDL0UsSUFBT0wsSUFBYVIsRUFBRWMsY0FBY1IsR0FBU0MsRUFBVUQsR0FBU0MsRUFBVUEsR0FBVyxHQUNyRkQsSUFBVUMsRUFBUUQsTUFBUUEsSUFBU0csS0FBS00sS0FBT2YsRUFBRWdCLFFBQU8sRUFBSSxHQUFJUCxLQUFLUSxTQUFVVixHQUMvRUUsS0FBS1MsYUFBZVgsUUFBVyxJQUFXQSxFQUFRWSxZQUFhVixLQUFLVyxZQUFjYixHQUFXLEdBQzdGYyxFQUFhWixLQUFLTSxLQUFLVCxNQUFPQyxFQUFTRSxLQUFLTSxNQUFPTixLQUFLYSxNQUFRYixLQUFLTSxLQUFLUSxjQUU5RSxTQUFTRixFQUFhRyxFQUFVakIsRUFBU1EsR0FDckMsSUFBSVUsRUFBa0JwQixFQUFVTixVQUFVMkIsUUFBUUYsR0FDbEQsT0FBT0MsR0FBbUJBLEVBQWdCbkIsT0FBU2UsRUFBYUksRUFBZ0JuQixXQUFPLEVBQVFTLEdBQy9GZixFQUFFZ0IsUUFBTyxFQUFJRCxFQUFNVSxHQUFrQnpCLEVBQUVnQixRQUFPLEVBQUlELEVBQU1SLElBQVUsSUFBTyxPQUFTUSxFQUFLWSxPQUFTWixFQUFLWSxLQUFPSCxJQUM1RyxHQTZCSm5CLEVBQVVOLFVBQVksQ0FDbEI2QixjQUFlLGlCQUNmWCxTQUFVLENBQ05ZLFlBQWEsSUFDYkMsWUFBYSxJQUNiQyxlQUFnQixDQUFFLElBQUssS0FDdkJDLGlCQUFrQixDQUFFLElBQUssS0FDekJDLFlBQWEsQ0FBRSxJQUFLLEtBQ3BCQyxpQkFBa0IsSUFDbEJDLFdBQVksS0FDWlIsS0FBTSxLQUNOUyxNQUFPLEtBQ1BDLFdBQVlyQyxFQUFFc0MsS0FDZEMsYUFBY3ZDLEVBQUVzQyxLQUNoQkUsVUFBV3hDLEVBQUVzQyxLQUNiRyxPQUFRLEVBQ1JDLFFBQVEsRUFDUkMsWUFBWSxFQUNaQyxvQkFBb0IsRUFDcEJDLHNCQUFzQixFQUN0QkMsWUFBWSxFQUNaQyxrQkFBa0IsRUFDbEJDLGlCQUFpQixFQUNqQjFDLE1BQU8sS0FDUDJDLFVBQVdqRCxFQUFFc0MsS0FDYlksYUFBYyxLQUNkQyxjQUFlLFNBQXVCQyxFQUFhckMsR0FDL0MsT0FBT2YsRUFBRXFELFdBQVd0QyxFQUFLbUMsY0FBZ0JuQyxFQUFLbUMsYUFBYUksS0FBSzdDLEtBQU0yQyxFQUFhckMsR0FBUXFDLEdBRS9GRyxjQUFlLEtBQ2ZDLFNBQVUsS0FDVkMsaUJBQWlCLEVBQ2pCQyxpQkFBaUIsRUFDakJDLGdCQUFpQjNELEVBQUVzQyxLQUNuQnNCLDBCQUEyQixJQUMzQnJDLGNBQWMsRUFDZHNDLFlBQVksRUFDWkMsY0FBYyxFQUNkQyxXQUFZLEdBQ1pDLGFBQWEsRUFDYkMsZUFBZ0IsR0FDaEJDLFdBQVksS0FDWkMsb0JBQW9CLEVBQ3BCQyxZQUFZLEVBQ1pDLGtCQUFtQixDQUFFLE9BQVEsTUFBTyxNQUFPLFdBQVksVUFDdkRDLFdBQVksQ0FBRSxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxFQUFHLEtBQ3ZJQyxXQUFZLEtBQ1pDLGNBQWUsS0FDZkMsZUFBZ0IsS0FDaEJDLDRCQUF3QixFQUN4QkMsWUFBWSxFQUNaQyxVQUFVLEVBQ1ZDLGdCQUFnQixFQUNoQkMsaUJBQWlCLEVBQ2pCQyxxQkFBc0IsTUFDdEJDLE9BQVEsS0FDUkMsVUFBVyxPQUNYQyxzQkFBc0IsRUFDdEJDLGdCQUFnQixHQUVwQmhFLFlBQWEsQ0FDVGlFLEVBQUcsQ0FDQ0MsVUFBVyxXQUNYQyxpQkFBa0IsS0FFdEJyRyxFQUFHLENBQ0NvRyxVQUFXLG9CQUNYQyxpQkFBa0IsS0FFdEJDLElBQUssQ0FDREYsVUFBVyw0QkFHbkIzRCxRQUFTLEdBQ1Q4RCxXQUFZLEdBQ1o3RCxLQUFNLFNBQWM4RCxHQUNoQixJQUFJQyxFQUFPakYsS0FDWCxNQUFPLGlCQUFtQmdGLElBQVVBLEVBQVF4RixFQUFTMEYsZUFBZUYsSUFBVXhGLEVBQVMyRixpQkFBaUJILElBQ3hHQSxFQUFRQSxFQUFNSSxTQUFXLENBQUVKLEdBQVVBLEVBQU96RixFQUFFOEYsS0FBS0wsRUFBTyxTQUFTTSxFQUFLckYsR0FDcEUsSUFBSXNGLEVBQWFoRyxFQUFFZ0IsUUFBTyxFQUFJLEdBQUkwRSxFQUFLM0UsTUFDdkMsR0EzR1osU0FBZ0NrRixFQUFLbEYsRUFBTUssRUFBYVEsR0FDcEQsU0FBU3NFLEVBQWFDLEVBQVFDLEdBRTFCLFFBREFBLE9BQWEsSUFBV0EsRUFBYUEsRUFBYUgsRUFBSUksYUFBYXpFLEVBQWdCLElBQU11RSxNQUNqRSxpQkFBbUJDLElBQWUsSUFBTUQsRUFBT0csUUFBUSxNQUFRRixFQUFhaEgsRUFBT2dILEdBQWMsVUFBWUEsRUFBYUEsR0FBYSxFQUFLLFNBQVdBLElBQWVBLEdBQWEsSUFDM01oRixFQUFZK0UsR0FBVUMsR0FFMUIsSUFBSSxJQUFPckYsRUFBS21FLHFCQUFzQixDQUNsQyxJQUFtRGlCLEVBQVFJLEVBQWFILEVBQVlJLEVBQWhGQyxFQUFjUixFQUFJSSxhQUFhekUsR0FDbkMsR0FBSTZFLEdBQWUsS0FBT0EsSUFBZ0JBLEVBQWNBLEVBQVlDLFFBQVEsS0FBTSxLQUNsRkgsRUFBY2hILEtBQUtDLE1BQU0sSUFBTWlILEVBQWMsTUFBT0YsRUFBYSxJQUFLQyxLQUFLSixPQUFhLEVBQ3hGRyxFQUFhLEdBQUksVUFBWUMsRUFBRUcsY0FBZSxDQUMxQ1AsRUFBYUcsRUFBWUMsR0FDekIsTUFFSixJQUFLTCxLQUFVRCxFQUFhLFFBQVNFLEdBQWFoRixFQUFZZCxPQUFTZSxFQUFhRCxFQUFZZCxNQUFPYyxFQUFhTCxHQUNwSEEsRUFBTSxDQUNGLEdBQUl3RixFQUFhLElBQUtDLEtBQUtKLE9BQWEsRUFBUUcsRUFBYSxHQUFJQyxFQUFFRyxnQkFBa0JSLEVBQU9RLGNBQWUsQ0FDdkdQLEVBQWFHLEVBQVlDLEdBQ3pCLE1BRUpOLEVBQWFDLEVBQVFDLElBRzdCLE9BQU9wRyxFQUFFZ0IsUUFBTyxFQUFJRCxFQUFNSyxHQUFjLFFBQVU2RSxFQUFJVyxNQUFRN0YsRUFBSzhDLGFBQWVvQyxFQUFJWSxNQUFNQyxVQUFZLFNBQ3hHLFFBQVViLEVBQUlXLE1BQVE3RixFQUFLUSxlQUFpQjBFLEVBQUlXLElBQU0sTUFBT1gsRUFBSWMsZ0JBQWdCLE9BQ2pGaEcsRUFBS08sT0FBUSxHQUFLMEYsT0FBT0MsS0FBSzdGLEdBQWE4RixPQWtGL0JDLENBQXVCekcsRUFBSXNGLEVBQVloRyxFQUFFZ0IsUUFBTyxFQUFJLEdBQUkwRSxFQUFLdEUsYUFBY3NFLEVBQUs5RCxlQUFnQixDQUNoRyxJQUFJaEIsRUFBVVYsRUFBZ0I4RixFQUFZTixFQUFLeEUsbUJBQy9DLElBQVdOLFNBQVksSUFBV0YsRUFBRzBHLFlBQWMxRyxFQUFHMEcsVUFBVXJHLEtBQUs0QixZQUFhLEVBQ2xGakMsRUFBRzBHLFVBQVVDLFVBQVczRyxFQUFHMEcsVUFBWSxJQUFJL0csT0FBVSxPQUFRLEdBQVEsR0FBS0ssRUFBRzBHLFVBQVVyRyxLQUFPaUYsRUFDOUZ0RixFQUFHMEcsVUFBVWxHLGFBQWV3RSxFQUFLeEUsYUFBY1IsRUFBRzBHLFVBQVVoRyxZQUFjcEIsRUFBRWdCLFFBQU8sRUFBSSxHQUFJMEUsRUFBS3RFLGFBQ2hHVixFQUFHMEcsVUFBVTlGLE1BQVEwRSxFQUFXMUUsT0FBUzBFLEVBQVd6RSxhQUFjYixFQUFHMEcsVUFBVTFHLEdBQUtBLEVBQ3BGQSxFQUFHMEcsVUFBVXhHLFFBQVVBLEVBQVNaLEVBQUVzSCxLQUFLNUcsRUFBSSxrQkFBbUJzRixHQUFhNUYsRUFBVWtELEtBQUs1QyxFQUFHMEcsVUFBVyxDQUNwR0csT0FBUSxhQUdoQjlCLEdBQVNBLEVBQU0sSUFBTUEsRUFBTSxHQUFHMkIsV0FBYTNHLE1BRW5EMEYsT0FBUSxTQUFnQjVGLEVBQVNpSCxHQUM3QixNQUFPLGlCQUFtQmpILEVBQVVFLEtBQUtNLEtBQUtSLEdBQVcsV0FBYWIsRUFBUWEsSUFBWVAsRUFBRWdCLE9BQU9QLEtBQUtXLFlBQWFiLEdBQ3JIRSxLQUFLQyxLQUFNLElBQU84RyxHQUFZL0csS0FBS2tCLEtBQUtsQixLQUFLQyxJQUFLRCxXQUFRLEdBRTlEZ0gsY0FBZSxTQUF1QkMsR0FDbEMsT0FBT2pILEtBQUtHLFFBQVVILEtBQUtHLFNBQVdWLEVBQWdCTyxLQUFLTSxLQUFNTixLQUFLUyxjQUN0RWQsRUFBVWtELEtBQUs3QyxLQUFNLENBQ2pCOEcsT0FBUSxnQkFDUkcsTUFBT0EsS0FHZkwsT0FBUSxXQUNKLE9BQU9qSCxFQUFVa0QsS0FBSzdDLEtBQU0sQ0FDeEI4RyxPQUFRLFlBR2hCSSxhQUFjLFdBQ1YsT0FBT2xILEtBQUtHLFFBQVVILEtBQUtHLFNBQVdWLEVBQWdCTyxLQUFLTSxLQUFNTixLQUFLUyxjQUN0RWQsRUFBVWtELEtBQUs3QyxLQUFNLENBQ2pCOEcsT0FBUSxrQkFHaEJLLGVBQWdCLFdBQ1osT0FBUW5ILEtBQUtNLEtBQUs0QixZQUV0QjRCLFdBQVksV0FDUixPQUFPOUQsS0FBS0csUUFBVUgsS0FBS0csU0FBV1YsRUFBZ0JPLEtBQUtNLEtBQU1OLEtBQUtTLGNBQ3RFZCxFQUFVa0QsS0FBSzdDLEtBQU0sQ0FDakI4RyxPQUFRLGdCQUdoQk0sWUFBYSxXQUNULE9BQU9wSCxLQUFLRyxRQUFVSCxLQUFLRyxTQUFXVixFQUFnQk8sS0FBS00sS0FBTU4sS0FBS1MsY0FDdEVkLEVBQVVrRCxLQUFLN0MsS0FBTSxDQUNqQjhHLE9BQVEsaUJBR2hCTyxRQUFTLFNBQWlCSixHQUN0QixPQUFPakgsS0FBS0csUUFBVUgsS0FBS0csU0FBV1YsRUFBZ0JPLEtBQUtNLEtBQU1OLEtBQUtTLGNBQ3RFZCxFQUFVa0QsS0FBSzdDLEtBQU0sQ0FDakI4RyxPQUFRLFVBQ1JHLE1BQU9BLEtBR2ZLLE9BQVEsU0FBZ0JMLEVBQU9NLEdBQzNCLE9BQU92SCxLQUFLRyxRQUFVSCxLQUFLRyxTQUFXVixFQUFnQk8sS0FBS00sS0FBTU4sS0FBS1MsY0FDdEVkLEVBQVVrRCxLQUFLN0MsS0FBTSxDQUNqQjhHLE9BQVEsU0FDUkcsTUFBT0EsRUFDUE0sU0FBVUEsS0FHbEJDLFNBQVUsU0FBa0JQLEdBQ3hCakgsS0FBS0MsSUFBTVYsRUFBRVMsS0FBS0MsSUFBSXdILFFBQVEsV0FBWSxDQUFFUixLQUVoRHZILFlBQWFBLEdBQ2RFLEVBQVU4SCxlQUFpQixTQUFTNUgsR0FDbkNQLEVBQUVnQixRQUFPLEVBQUlYLEVBQVVOLFVBQVVrQixTQUFVVixJQUM1Q0YsRUFBVStILGtCQUFvQixTQUFTQyxHQUN0Q3JJLEVBQUVnQixRQUFPLEVBQUlYLEVBQVVOLFVBQVVvQixZQUFha0gsSUFDL0NoSSxFQUFVaUksY0FBZ0IsU0FBU2hJLEdBQ2xDTixFQUFFZ0IsUUFBTyxFQUFJWCxFQUFVTixVQUFVMkIsUUFBU3BCLElBQzNDRCxFQUFVMEgsT0FBUyxTQUFTTCxFQUFPbkgsRUFBU3lILEdBQzNDLE9BQU8zSCxFQUFVRSxHQUFTd0gsT0FBT0wsRUFBT00sSUFDekMzSCxFQUFVa0ksT0FBUyxTQUFTYixFQUFPbkgsR0FDbEMsT0FBT0YsRUFBVUUsR0FBU2tILGNBQWNDLElBQ3pDckgsRUFBVXlILFFBQVUsU0FBU0osRUFBT25ILEdBQ25DLE9BQU9GLEVBQVVFLEdBQVN1SCxRQUFRSixJQUNuQ3JILEVBQVVnSCxPQUFTLFNBQVM1QixHQUMzQixpQkFBbUJBLElBQVVBLEVBQVF4RixFQUFTMEYsZUFBZUYsSUFBVXhGLEVBQVMyRixpQkFBaUJILElBQ2pHQSxFQUFRQSxFQUFNSSxTQUFXLENBQUVKLEdBQVVBLEVBQU96RixFQUFFOEYsS0FBS0wsRUFBTyxTQUFTTSxFQUFLckYsR0FDcEVBLEVBQUcwRyxXQUFhMUcsRUFBRzBHLFVBQVVDLFlBRWxDaEgsRUFBVTRILFNBQVcsU0FBU3hDLEVBQU9pQyxHQUNwQyxpQkFBbUJqQyxJQUFVQSxFQUFReEYsRUFBUzBGLGVBQWVGLElBQVV4RixFQUFTMkYsaUJBQWlCSCxJQUNqR0EsRUFBUUEsRUFBTUksU0FBVyxDQUFFSixHQUFVQSxFQUFPekYsRUFBRThGLEtBQUtMLEVBQU8sU0FBU00sRUFBS3JGLEdBQ3BFQSxFQUFHMEcsVUFBWTFHLEVBQUcwRyxVQUFVYSxTQUFTUCxHQUFTMUgsRUFBRVUsR0FBSXdILFFBQVEsV0FBWSxDQUFFUixPQUdsRixJQUFJYyxFQUFtQixJQUFJQyxPQUFPLE1BQVEsQ0FBRSxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxLQUFNLElBQUssS0FBTUMsS0FBSyxPQUFTLElBQUssT0FDNUlySSxFQUFVc0ksWUFBYyxTQUFTQyxHQUM3QixPQUFPQSxFQUFJbEMsUUFBUThCLEVBQWtCLFNBQ3RDbkksRUFBVXdJLGNBQWdCN0ksRUFBR1osRUFBT2lCLFVBQVlBLEVBQVd4QixFQUFPRCxRQUFVeUIsR0FDaEYsU0FBU3hCLEVBQVFELEVBQVNhLEdBQ3pCLGFBQ0EsSUFBSXFKLEVBQVNySixFQUFvQixHQUNqQyxRQUFJLElBQVdxSixFQUFRLEtBQU0scUJBQzdCakssRUFBT0QsUUFBVWtLLEdBQ2xCLFNBQVNqSyxFQUFRRCxHQUNoQkMsRUFBT0QsUUFBVVMsZ0NBQ2xCLFNBQVNSLE9BQVFELFFBQVNhLHFCQUN6QixhQUNBLElBQUlzSiw4QkFDSixTQUFTckosUUFBUUMsR0FDYixPQUFPRCxRQUFVLG1CQUFxQkUsUUFBVSxpQkFBbUJBLE9BQU9DLFNBQVcsU0FBaUJGLEdBQ2xHLGNBQWNBLEdBQ2QsU0FBaUJBLEdBQ2pCLE9BQU9BLEdBQU8sbUJBQXFCQyxRQUFVRCxFQUFJRyxjQUFnQkYsUUFBVUQsSUFBUUMsT0FBT0csVUFBWSxnQkFBa0JKLElBQ2pIQSxHQUVmb0osOEJBQWdDLFdBQzVCLE1BQU8sb0JBQXNCM0osT0FBU0EsT0FBUyxJQUFLNEosS0FBSywwQkFBVixDQUFxQyxJQUFJNUosUUFDMUZrRSxLQUFLMUUsUUFBU2Esb0JBQXFCYixRQUFTQyxhQUFTLElBQVdrSyxnQ0FBa0NsSyxPQUFPRCxRQUFVbUssZ0NBQ3RILFNBQVNsSyxFQUFRRCxFQUFTYSxHQUN6QixhQUNBLElBQUlPLEVBQUlQLEVBQW9CLEdBc1A1QlosRUFBT0QsUUFBVSxDQUNic0IsZ0JBdFBKLFNBQXlCYSxFQUFNa0ksR0FFM0IsU0FBU0MsRUFBYXZILEVBQU1xRyxFQUFVakgsR0FDbEMsSUFBb0JvSSxFQUFtQkMsRUFBbkNDLEdBQVksRUFDaEIsR0FBSSxPQUFTMUgsR0FBUSxLQUFPQSxJQUEwQ0EsR0FBakMwSCxFQUFZLE9BQVN0SSxFQUFLcUIsUUFBMkJULEVBQU9aLEVBQUtxQixPQUNqR3NFLFFBQVEsaUJBQWtCLE9BQVUyQyxHQUFZLEVBQUksT0FBUSxJQUFNMUgsRUFBS3VGLFNBQVUsSUFBT25HLEVBQUsyQixRQUFVLElBQU0zQixFQUFLMEIsU0FBVzFCLEVBQUtlLFlBQWMsSUFDckosRUFBSWYsRUFBSzBCLFFBQVUsTUFBUTFCLEVBQUswQixRQUFVLE1BQVExQixFQUFLMEIsT0FBUSxDQUMzRCxJQUFJNkcsRUFBYyxNQUFRdkksRUFBSzBCLE9BQVMsRUFBSSxNQUFRMUIsRUFBSzBCLE9BQVMsRUFBSTFCLEVBQUswQixPQUMzRWQsRUFBT1osRUFBS2tCLFlBQVksR0FBS04sRUFBT1osRUFBS2tCLFlBQVksR0FBS2xCLEVBQUtpQixpQkFBaUIsR0FBS3NILEVBQWMsSUFBTXZJLEVBQUswQixPQUFTMUIsRUFBS2lCLGlCQUFpQixHQUVqSixPQUFPb0gsRUFBYUMsRUFBWSxTQUFXdEksRUFBS3FCLE1BQVFyQixFQUFLUSxhQUFlSSxFQUFLNEgsTUFBTSxJQUFJQyxVQUFVZCxLQUFLLElBQU0vRyxHQUNoSCxJQUFPWixFQUFLbUQsYUFBZWtGLEVBQWEsTUFBUUEsUUFBYSxJQUFXL0ksVUFBVU4sVUFBVXlGLFdBQVc0RCxLQUFlLElBQU9ILEdBQVdFLEVBQW9CLENBQ3hKeEgsS0FBTUEsRUFDTjhILFVBQVdwSixVQUFVTixVQUFVSSxZQUFZd0IsRUFBTTBILEVBQVd0SSxHQUM1RDJJLGVBQWdCLEdBQ2hCQyxhQUFTLEVBQ1RDLFlBQVEsRUFDUkMsTUFBTyxHQUNQQyxTQUFVLEdBQ1Y5QixTQUFVQSxFQUNWK0IsZ0JBQVksRUFDWkMsVUFBVyxLQUNaLElBQU9mLElBQVk1SSxVQUFVTixVQUFVeUYsV0FBVzRELEdBQWNELEVBQ25FQSxFQUFvQm5KLEVBQUVnQixRQUFPLEVBQUksR0FBSVgsVUFBVU4sVUFBVXlGLFdBQVc0RCxNQUFpQkQsRUFBb0JuSixFQUFFZ0IsUUFBTyxFQUFJLEdBQUlYLFVBQVVOLFVBQVV5RixXQUFXNEQsSUFDekpELEVBRUosR0FBSW5KLEVBQUVxRCxXQUFXdEMsRUFBS1ksUUFBVVosRUFBS1ksS0FBT1osRUFBS1ksS0FBS1osSUFBUWYsRUFBRWlLLFFBQVFsSixFQUFLWSxNQUFPLENBQ2hGLEdBQUksRUFBSVosRUFBS1ksS0FBS3VGLE9BQVEsQ0FDdEIsT0FBU25HLEVBQUttRCxhQUFlbkQsRUFBS21ELFlBQWEsR0FDL0MsSUFBSWdHLEVBQVVuSixFQUFLa0IsWUFBWSxHQUMvQixPQUFPakMsRUFBRThGLEtBQUsvRSxFQUFLTyxNQUFRUCxFQUFLWSxLQUFLNkgsVUFBWXpJLEVBQUtZLEtBQU0sU0FBU29FLEVBQUtvRSxHQUN0RSxFQUFJRCxFQUFRaEQsU0FBV2dELEdBQVduSixFQUFLa0IsWUFBWSxHQUFLbEIsRUFBS21CLGlCQUFtQm5CLEVBQUtrQixZQUFZLFNBQ2pHLElBQVdrSSxFQUFJeEksTUFBUTNCLEVBQUVxRCxXQUFXOEcsRUFBSXhJLE1BQVF1SSxHQUFXQyxFQUFNRCxHQUFXQyxFQUFJeEksT0FDaER1SCxFQUFoQ2dCLEdBQVduSixFQUFLa0IsWUFBWSxHQUEwQmxCLEVBQUtZLEtBQU1aLEdBRXpFQSxFQUFLWSxLQUFPWixFQUFLWSxLQUFLeUksTUFFMUIsT0FBTyxPQUFTckosRUFBS21ELGFBQWVuRCxFQUFLbUQsWUFBYSxHQUFVbkQsRUFBS1ksV0FBUSxJQUFXWixFQUFLWSxLQUFLQSxPQUFTM0IsRUFBRXFELFdBQVd0QyxFQUFLWSxLQUFLQSxNQUFRdUgsRUFBYW5JLEVBQUtZLEtBQUtBLEtBQU1aLEVBQUtZLEtBQU1aLEdBQVFtSSxFQUFhbkksRUFBS1ksS0FBTVosRUFBS1ksS0FBTVosSUFrTjdOWixZQS9NSixTQUFxQndCLEVBQU0wSCxFQUFXdEksR0FDbEMsSUFBK1dzSixFQUFPQyxFQUFxQ0MsRUFBY0MsRUFBcUJDLEVBQVlDLEVBQXRjQyxFQUFZLDRFQUE2RUMsRUFBaUIsa05BQW1OQyxHQUFVLEVBQUlDLEVBQWUsSUFBSUMsRUFBdUJDLEVBQWEsR0FBSUMsRUFBYSxHQUE4REMsR0FBa0IsRUFDdmUsU0FBU0gsRUFBVUksRUFBU0MsRUFBWUMsRUFBY0MsR0FDbEQ3SyxLQUFLOEssUUFBVSxHQUFJOUssS0FBSytLLFVBQVlMLElBQVcsRUFBSTFLLEtBQUtnTCxpQkFBa0IsRUFBSWhMLEtBQUswSyxRQUFVQSxJQUFXLEVBQ3hHMUssS0FBSzJLLFdBQWFBLElBQWMsRUFBSTNLLEtBQUs0SyxhQUFlQSxJQUFnQixFQUFJNUssS0FBSzZLLGFBQWVBLElBQWdCLEVBQ2hIN0ssS0FBS2lMLFdBQWEsQ0FDZEMsSUFBSyxFQUNMQyxJQUFLLEdBR2IsU0FBU0MsRUFBcUJDLEVBQVFDLEVBQVNDLEdBQzNDQSxPQUFXLElBQVdBLEVBQVdBLEVBQVdGLEVBQU9QLFFBQVFyRSxPQUMzRCxJQUFJK0UsRUFBWUgsRUFBT1AsUUFBUVMsRUFBVyxHQUMxQyxHQUFJM0MsRUFBVyxJQUFNMEMsRUFBUXpGLFFBQVEsTUFBUXVFLEdBQVcsZ0JBQWdCcUIsS0FBS0gsSUFBWSxNQUFRQSxFQUFVRCxFQUFPUCxRQUFRWSxPQUFPSCxJQUFZLEVBQUcsQ0FDNUlJLEdBQUksSUFBSTNELE9BQU9zRCxFQUFTaEwsRUFBS2lFLE9BQVMsSUFBTSxJQUM1Q3FILFFBQVEsRUFDUkMsYUFBYSxFQUNiQyxvQkFBZ0IsSUFBV04sRUFBWSxTQUFXQSxFQUFVTyxNQUFRVCxFQUNwRS9HLE9BQVEsS0FDUndILElBQUtULEVBQ0xqSyxpQkFBYSxFQUNiMkssVUFBV1YsS0FDVGxCLElBQVlrQixFQUFVQSxFQUFRQSxFQUFRN0UsT0FBUyxJQUFLbEgsRUFBRThGLEtBQUtpRyxFQUFReEMsTUFBTSxJQUFLLFNBQVN4RCxFQUFLMkcsR0FDOUZULEVBQVlILEVBQU9QLFFBQVFTLEVBQVcsR0FBSUYsRUFBT1AsUUFBUVksT0FBT0gsSUFBWSxFQUFHLENBQzNFSSxHQUFJLFNBQVNGLEtBQUtuTCxFQUFLMkQsd0JBQTBCZ0ksR0FBUSxJQUFJakUsT0FBTyxLQUFPMUgsRUFBSzJELHdCQUEwQmdJLEdBQVEsSUFBSzNMLEVBQUtpRSxPQUFTLElBQU0sSUFBTSxLQUNqSnFILFFBQVEsRUFDUkMsYUFBYSxFQUNiQyxvQkFBZ0IsSUFBV04sRUFBWSxTQUFXQSxFQUFVTyxNQUFRRSxJQUFRLElBQU9ULEVBQVVJLE9BQzdGckgsT0FBUSxLQUNSd0gsSUFBS3pMLEVBQUsyRCx3QkFBMEJnSSxFQUNwQzVLLGlCQUFhLElBQVdmLEVBQUsyRCx1QkFBeUJnSSxPQUFPLEVBQzdERCxXQUFZNUIsRUFBVSxJQUFNLElBQU02QixPQUVyQzdCLEdBQVUsTUFBUyxDQUNwQixJQUFJOEIsR0FBVzVMLEVBQUtJLFlBQWNKLEVBQUtJLFlBQVk0SyxRQUFXLElBQVcxTCxVQUFVTixVQUFVb0IsWUFBWTRLLEdBQ3pHWSxJQUFZOUIsRUFBVWlCLEVBQU9QLFFBQVFZLE9BQU9ILElBQVksRUFBRyxDQUN2REksR0FBSU8sRUFBUXRILFVBQVksaUJBQW1Cc0gsRUFBUXRILFVBQVksSUFBSW9ELE9BQU9rRSxFQUFRdEgsVUFBV3RFLEVBQUtpRSxPQUFTLElBQU0sSUFBTSxJQUFJLFdBQ3ZIdkUsS0FBS3lMLEtBQU9TLEVBQVF0SCxXQUNsQixJQUFJb0QsT0FBTyxLQUNqQjRELE9BQVFNLEVBQVFOLFNBQVUsRUFDMUJDLGFBQWEsRUFDYkMsb0JBQWdCLElBQVdOLEVBQVksU0FBV0EsRUFBVU8sT0FBU0csRUFBUXJILGtCQUFvQnlHLEdBQ2pHL0csT0FBUTJILEVBQVEzSCxPQUNoQndILElBQUtHLEVBQVFySCxrQkFBb0J5RyxFQUNqQ2pLLFlBQWE2SyxFQUFRN0ssWUFDckIySyxVQUFXVixFQUNYYSxVQUFXRCxFQUFRQyxhQUNqQmQsRUFBT1AsUUFBUVksT0FBT0gsSUFBWSxFQUFHLENBQ3ZDSSxHQUFJLFNBQVNGLEtBQUtuTCxFQUFLMkQsd0JBQTBCcUgsR0FBVyxJQUFJdEQsT0FBTyxLQUFPMUgsRUFBSzJELHdCQUEwQnFILEdBQVcsSUFBS2hMLEVBQUtpRSxPQUFTLElBQU0sSUFBTSxLQUN2SnFILFFBQVEsRUFDUkMsYUFBYSxFQUNiQyxvQkFBZ0IsSUFBV04sRUFBWSxTQUFXQSxFQUFVTyxNQUFRVCxJQUFXLElBQU9FLEVBQVVJLE9BQ2hHckgsT0FBUSxLQUNSd0gsSUFBS3pMLEVBQUsyRCx3QkFBMEJxSCxFQUNwQ2pLLGlCQUFhLElBQVdmLEVBQUsyRCx1QkFBeUJxSCxPQUFVLEVBQ2hFVSxXQUFZNUIsRUFBVSxJQUFNLElBQU1rQixJQUNsQ2xCLEdBQVUsSUFXdEIsU0FBU2dDLElBQ0wsR0FBSSxFQUFJN0IsRUFBVzlELFFBQ2YsR0FBNkQyRSxFQUF6RHJCLEVBQXNCUSxFQUFXQSxFQUFXOUQsT0FBUyxHQUE4Q29ELEdBQ3ZHRSxFQUFvQmMsYUFBYyxDQUM5QmIsRUFBYU8sRUFBV1osTUFDeEIsSUFBSyxJQUFJMEMsRUFBTyxFQUFHQSxFQUFPckMsRUFBV2MsUUFBUXJFLE9BQVE0RixJQUFRckMsRUFBV2MsUUFBUXVCLEdBQU0zQixVQUFZVixFQUFXYyxRQUFRdUIsR0FBTTNCLFNBQVUsR0FDckksRUFBSUgsRUFBVzlELFFBQVVzRCxFQUFzQlEsRUFBV0EsRUFBVzlELE9BQVMsSUFDMURxRSxRQUFRd0IsS0FBS3RDLEdBQWVLLEVBQWFTLFFBQVF3QixLQUFLdEMsU0FFM0VvQixFQUFxQmYsRUFBY1IsR0FpQjlDLFNBQVMwQyxFQUFTekIsR0FDZCxJQUFJMEIsRUFBYSxJQUFJbEMsR0FBVSxHQUMvQixPQUFPa0MsRUFBV3pCLFdBQVksRUFBSXlCLEVBQVcxQixRQUFVQSxFQUFTMEIsRUFFcEUsU0FBU0MsSUFDTCxJQUFJM0MsRUFBZVMsRUFBV1osT0FBb0JvQixXQUFZLE9BQUksSUFBV2pCLEVBQWMsR0FBSSxFQUFJUyxFQUFXOUQsUUFDMUcsSUFBSXNELEVBQXNCUSxFQUFXQSxFQUFXOUQsT0FBUyxJQUF3QnFFLFFBQVF3QixLQUFLeEMsR0FDOUZDLEVBQW9CYyxhQUFjLENBQzlCYixFQUFhTyxFQUFXWixNQUN4QixJQUFLLElBQUkwQyxFQUFPLEVBQUdBLEVBQU9yQyxFQUFXYyxRQUFRckUsT0FBUTRGLElBQVFyQyxFQUFXYyxRQUFRdUIsR0FBTTNCLFNBQVUsRUFDaEdWLEVBQVdjLFFBQVF1QixHQUFNckIsaUJBQWtCLEVBQzNDLEVBQUlULEVBQVc5RCxRQUFVc0QsRUFBc0JRLEVBQVdBLEVBQVc5RCxPQUFTLElBQzFEcUUsUUFBUXdCLEtBQUt0QyxHQUFlSyxFQUFhUyxRQUFRd0IsS0FBS3RDLFNBRTNFSyxFQUFhUyxRQUFRd0IsS0FBS3hDLFFBQW9Cc0MsSUFFekQsU0FBU00sRUFBZ0I1QixHQUNyQixJQUFJYixFQUFZYSxFQUFRbkIsTUFDeEIsT0FBT00sRUFBVVcsZUFBaUJYLEVBQVlzQyxFQUFTLENBQUV6QixFQUFRbkIsTUFBT00sS0FDeEVBLEVBRUosSUFBS3JCLElBQWN0SSxFQUFLZ0IsZUFBZSxRQUFLLEVBQVFoQixFQUFLZ0IsZUFBZSxRQUFLLEdBQVNzSSxFQUFRaEIsRUFBWXVCLEVBQWV3QyxLQUFLekwsR0FBUWdKLEVBQVV5QyxLQUFLekwsSUFBUyxDQUMxSixHQUFJMkksRUFBSUQsRUFBTSxHQUFJaEIsRUFBVyxPQUFRaUIsRUFBRStDLE9BQU8sSUFDNUMsSUFBSyxJQUNIL0MsRUFBSSxRQUNKLE1BRUYsSUFBSyxJQUNMLElBQUssSUFDSEEsRUFBSSxJQUFNQSxFQUFJLElBQ2QsTUFFRixJQUFLLElBQ0gsR0FBSSxJQUFNVSxFQUFXOUQsT0FBUSxDQUN6QixJQUFJb0csRUFBZ0JOLEVBQVNsQyxFQUFhUyxTQUMxQytCLEVBQWM5QixXQUFZLEVBQUlSLEVBQVcrQixLQUFLTyxHQUFnQnhDLEVBQWFTLFFBQVUsR0FDckZMLEdBQWtCLEdBSTFCLEdBQUlMLEVBQVNnQyxTQUFvQixPQUFRdkMsRUFBRStDLE9BQU8sSUFDaEQsSUFBSyxNQUdMLElBQUssTUFHTCxJQUFLLE9BR0wsSUFBSyxPQUNILE1BRUYsS0FBS3RNLEVBQUtvQixXQUNSMEksR0FBVSxFQUFJeEIsR0FBYXdELElBQzNCLE1BRUYsS0FBSzlMLEVBQUtnQixlQUFlLEdBQ3pCLEtBQUtoQixFQUFLa0IsWUFBWSxHQUNwQmlMLElBQ0EsTUFFRixLQUFLbk0sRUFBS2dCLGVBQWUsR0FDdkJpSixFQUFXK0IsS0FBSyxJQUFJaEMsR0FBVSxHQUFJLElBQ2xDLE1BRUYsS0FBS2hLLEVBQUtrQixZQUFZLEdBQ3BCK0ksRUFBVytCLEtBQUssSUFBSWhDLEdBQVUsSUFDOUIsTUFFRixLQUFLaEssRUFBS2lCLGlCQUFpQixHQUN6QixJQUFJMEosRUFBYSxJQUFJWCxHQUFVLEdBQUksR0FBSSxHQUVuQ3dDLEdBREpqRCxFQUFJQSxFQUFFNUQsUUFBUSxRQUFTLEtBQ1g2QyxNQUFNLEtBQU1pRSxFQUFLRCxFQUFJLEdBQUdoRSxNQUFNLEtBQU1rRSxFQUFNQyxNQUFNRixFQUFHLElBQU1BLEVBQUcsR0FBS0csU0FBU0gsRUFBRyxJQUFLSSxFQUFNLElBQU1KLEVBQUd0RyxPQUFTdUcsRUFBTUMsTUFBTUYsRUFBRyxJQUFNQSxFQUFHLEdBQUtHLFNBQVNILEVBQUcsSUFDL0osTUFBUUMsR0FBTyxNQUFRQSxJQUFRQSxFQUFNLE1BQVFHLEVBQU0sRUFBSSxHQUFJbEMsRUFBV0EsV0FBYSxDQUMvRUMsSUFBSzhCLEVBQ0w3QixJQUFLZ0MsRUFDTEMsSUFBS04sRUFBSSxJQUViLElBQUloQyxFQUFVLEVBQUlQLEVBQVc5RCxPQUFTOEQsRUFBV0EsRUFBVzlELE9BQVMsR0FBR3FFLFFBQVVULEVBQWFTLFFBQy9GLElBQUlsQixFQUFRa0IsRUFBUW5CLE9BQWFrQixhQUFjLENBQzNDQyxFQUFRd0IsS0FBSzFDLEdBQVFrQixFQUFVbEIsRUFBTWtCLFFBQ3JDLElBQUkwQixFQUFhLElBQUlsQyxHQUFVLEdBQUsrQyxFQUFXdkMsRUFBUW5CLE1BQ3ZEbUIsRUFBUXdCLEtBQUtFLEdBQWExQixFQUFVMEIsRUFBVzFCLFFBQVNsQixFQUFReUQsRUFFcEV6RCxFQUFNYyxVQUFZZCxFQUFRMkMsRUFBUyxDQUFFM0MsS0FBV2tCLEVBQVF3QixLQUFLMUMsR0FBUWtCLEVBQVF3QixLQUFLckIsR0FDbEYsTUFFRixLQUFLM0ssRUFBS21CLGlCQUNSLEdBQUksRUFBSThJLEVBQVc5RCxPQUFRLENBRXZCLElBQUk2RyxHQURKdkQsRUFBc0JRLEVBQVdBLEVBQVc5RCxPQUFTLElBQ2xCcUUsUUFBUWYsRUFBb0JlLFFBQVFyRSxPQUFTLEdBQ2hGd0QsRUFBWUYsRUFBb0JnQixpQkFBYyxJQUFXdUMsRUFBU3hDLFVBQVcsSUFBT3dDLEVBQVM1QyxVQUFXLElBQU80QyxFQUFTekMsY0FBZ0JOLEVBQVdaLE1BQVErQyxFQUFnQjNDLEVBQW9CZSxjQUM1TGIsRUFBWXlDLEVBQWdCckMsRUFBYVMsU0FDaEQsR0FBSWIsRUFBVVksYUFBY04sRUFBVytCLEtBQUtyQyxRQUFpQixHQUFJQSxFQUFVZSxpQkFBbUJoQixFQUFhTyxFQUFXWixNQUN0SE0sRUFBVWUsaUJBQWtCLEdBQU1oQixFQUFhLElBQUlNLEdBQVUsR0FBSSxHQUFJLEdBQUksR0FBS04sRUFBV2MsUUFBUXdCLEtBQUtyQyxHQUN0R00sRUFBVytCLEtBQUt0QyxHQUFhQyxFQUFVYyxVQUFXLENBQzlDZCxFQUFVYyxXQUFZLEVBQ3RCLElBQUlDLEVBQWtCLElBQUlWLEdBQVUsR0FDcENVLEVBQWdCQSxpQkFBa0IsRUFBSVQsRUFBVytCLEtBQUt0QixHQUUxRCxNQUVGLFFBQ0VvQixLQUdSLElBQUszQixHQUFtQmdDLElBQWMsRUFBSWxDLEVBQVc5RCxRQUFVcUQsRUFBZVMsRUFBV1osTUFDekZVLEVBQWFTLFFBQVF3QixLQUFLeEMsR0FDMUIsT0FBTyxFQUFJTyxFQUFhUyxRQUFRckUsU0EvSWhDLFNBQVM4RyxFQUFrQnZFLEdBQ3ZCQSxHQUFhQSxFQUFVOEIsU0FBV3ZMLEVBQUU4RixLQUFLMkQsRUFBVThCLFFBQVMsU0FBU3hGLEVBQUtrSSxHQUN0RSxJQUFJQyxFQUFZekUsRUFBVThCLFFBQVF4RixFQUFNLFNBQ3ZDLElBQVdtSSxRQUFhLElBQVdBLEVBQVUzQyxVQUFXLElBQU8yQyxFQUFVN0MsZUFBaUI0QyxHQUFTQSxFQUFNOUMsVUFBWThDLEVBQU05QyxTQUFVLEVBQ3RJOUIsSUFBY3dDLEVBQXFCb0MsRUFBT2xOLEVBQUtrQixZQUFZLEdBQUksSUFBSSxJQUFPZ00sRUFBTXpDLFdBQWFLLEVBQXFCb0MsRUFBT2xOLEVBQUtrQixZQUFZLE1BQzFJK0wsRUFBa0JDLEtBMElpQkQsQ0FBa0JsRCxHQUFlRyxFQUFXOEIsS0FBS2pDLEtBQzNGL0osRUFBS1EsY0FBZ0JSLEVBQUtPLFFBN0gzQixTQUFTNk0sRUFBYzFFLEdBS25CLElBQUssSUFBSVksS0FBU1osRUFBVThCLFFBQVU5QixFQUFVOEIsUUFBUS9CLFVBQVdDLEVBQVU4QixRQUFTLEdBQUl2RSxPQUFPakgsVUFBVXFPLGVBQWU5SyxLQUFLbUcsRUFBVThCLFFBQVNsQixHQUFRLENBQ3RKLElBQUlnRSxFQUFXVixTQUFTdEQsR0FDeEIsR0FBSVosRUFBVThCLFFBQVFsQixHQUFPZ0IsY0FBZ0I1QixFQUFVOEIsUUFBUThDLEVBQVcsSUFBTTVFLEVBQVU4QixRQUFROEMsRUFBVyxHQUFHbEQsUUFBUyxDQUNySCxJQUFJbUQsRUFBSzdFLEVBQVU4QixRQUFRbEIsR0FDM0JaLEVBQVU4QixRQUFRWSxPQUFPOUIsRUFBTyxHQUFJWixFQUFVOEIsUUFBUVksT0FBT2tDLEVBQVcsRUFBRyxFQUFHQyxRQUVsRixJQUFXN0UsRUFBVThCLFFBQVFsQixHQUFPa0IsUUFBVTlCLEVBQVU4QixRQUFRbEIsR0FBUzhELEVBQWMxRSxFQUFVOEIsUUFBUWxCLElBQVVaLEVBQVU4QixRQUFRbEIsS0FWbEhrRSxFQVV5STlFLEVBQVU4QixRQUFRbEIsTUFUaEt0SixFQUFLZ0IsZUFBZSxHQUFLd00sRUFBS3hOLEVBQUtnQixlQUFlLEdBQUt3TSxJQUFPeE4sRUFBS2dCLGVBQWUsR0FBS3dNLEVBQUt4TixFQUFLZ0IsZUFBZSxHQUFLd00sSUFBT3hOLEVBQUtrQixZQUFZLEdBQUtzTSxFQUFLeE4sRUFBS2tCLFlBQVksR0FBS3NNLElBQU94TixFQUFLa0IsWUFBWSxLQUFPc00sRUFBS3hOLEVBQUtrQixZQUFZLElBQ2hQc00sR0FGSixJQUF1QkEsRUFZdkIsT0FBTzlFLEVBZ0gwQjBFLENBQWNsRCxFQUFXLElBQUtBLEtBTXhFLFNBQVNwTSxFQUFRRCxFQUFTYSxHQUN6QixhQUNBQSxFQUFvQixHQUFJQSxFQUFvQixHQUFJQSxFQUFvQixJQUFLQSxFQUFvQixJQUM3RlosRUFBT0QsUUFBVWEsRUFBb0IsSUFDdEMsU0FBU1osRUFBUUQsRUFBU2EsR0FDekIsYUFDQSxJQUFJWSxFQUFZWixFQUFvQixHQUNwQ1ksRUFBVStILGtCQUFrQixDQUN4Qm9HLEVBQUcsQ0FDQ25KLFVBQVcsb0JBQ1hMLE9BQVEsU0FFWnlKLElBQUssQ0FDRHBKLFVBQVcsdUJBQ1hMLE9BQVEsU0FFWjBKLElBQUssQ0FDRHJKLFVBQVcsY0FDWEwsT0FBUSxXQUdoQixJQUFJMkosRUFBbUIsSUFBSWxHLE9BQU8sc0NBQ2xDLFNBQVNtRyxFQUFZQyxFQUFNak8sRUFBU2tPLEVBQUtDLEVBQVFoTyxHQUM3QyxPQUFPOE4sR0FBUSxFQUFJQyxFQUFNLEdBQUssTUFBUWxPLEVBQVFnSixPQUFPa0YsRUFBTSxJQUFNRCxFQUFPak8sRUFBUWdKLE9BQU9rRixFQUFNLEdBQUtELEdBQ2pHLEVBQUlDLEVBQU0sR0FBSyxNQUFRbE8sRUFBUWdKLE9BQU9rRixFQUFNLEdBQUtsTyxFQUFRZ0osT0FBT2tGLEVBQU0sR0FBS0QsRUFBTyxJQUFNQSxHQUFRLEtBQU9BLEVBQ3hHRixFQUFpQnpDLEtBQUsyQyxHQUUxQnhPLEVBQVVpSSxjQUFjLENBQ3BCMEcsUUFBUyxDQUNMNU0sTUFBTywyREFFWDZNLElBQUssQ0FDRDdNLE1BQU8sbUJBQ1BPLFlBQVksR0FFaEJ1TSxHQUFJLENBQ0F2TixLQUFNLGtDQUNOUixZQUFhLENBQ1RoQyxFQUFHLENBQ0NrRyxVQUFXdUosR0FFZk8sRUFBRyxDQUNDOUosVUFBV3VKLEdBRWZRLEVBQUcsQ0FDQy9KLFVBQVd1SixHQUVmUyxFQUFHLENBQ0NoSyxVQUFXdUosSUFHbkJwTCxTQUFVLFNBQWtCOEwsRUFBYUMsRUFBZXhPLEdBQ3BELE9BQU91TyxHQUVYckssVUFBVyxXQUVmdUssTUFBTyxDQUNIN04sS0FBTSw0RUFDTmUsUUFBUSxFQUNSc0MsT0FBUSxRQUNSN0IsY0FBZSxTQUF1QkMsRUFBYXJDLEdBQy9DLE9BQU9xQyxFQUFjQSxFQUFZdUQsZUFBMkJELFFBQVEsVUFBVyxLQUVuRnZGLFlBQWEsQ0FDVG9FLElBQUssQ0FDREYsVUFBVyw4Q0FFZm9LLElBQUssQ0FDRHBLLFVBQVcsaUJBR25CN0IsU0FBVSxTQUFrQjhMLEVBQWFDLEVBQWV4TyxHQUNwRCxPQUFPdU8sR0FFWHJLLFVBQVcsU0FFZnlLLElBQUssQ0FDRC9OLEtBQU0scUJBRVZnTyxJQUFLLENBQ0RoTyxLQUFNLFlBQ05SLFlBQWEsQ0FDVHlPLEVBQUcsQ0FDQ3ZLLFVBQVcsNEJBQ1hMLE9BQVEsVUFHaEJoQyxpQkFBaUIsRUFDakJMLFlBQVksR0FFaEJrTixJQUFLLENBQ0RsTyxLQUFNLGNBQ044QyxlQUFnQixTQUF3Qm1GLEVBQVFrRixFQUFLZ0IsRUFBR0MsRUFBZWhQLEVBQU1ILEVBQVNtTyxHQUNsRixNQUFPLDZFQUE2RTdDLEtBQUt0QyxFQUFPbEIsS0FBSyxTQUc3RzdKLEVBQU9ELFFBQVV5QixHQUN0QixTQUFTeEIsRUFBUUQsRUFBU2EsR0FDekIsYUFDQSxTQUFTQyxFQUFRQyxHQUNiLE9BQU9ELEVBQVUsbUJBQXFCRSxRQUFVLGlCQUFtQkEsT0FBT0MsU0FBVyxTQUFpQkYsR0FDbEcsY0FBY0EsR0FDZCxTQUFpQkEsR0FDakIsT0FBT0EsR0FBTyxtQkFBcUJDLFFBQVVELEVBQUlHLGNBQWdCRixRQUFVRCxJQUFRQyxPQUFPRyxVQUFZLGdCQUFrQkosSUFDakhBLEdBRWYsSUFBSUssRUFBSVAsRUFBb0IsR0FBSUwsRUFBU0ssRUFBb0IsR0FBSVEsRUFBV2IsRUFBT2EsU0FBVStQLEVBQUs1USxFQUFPNlEsV0FBYTdRLEVBQU82USxVQUFVQyxXQUFhLEdBQUlDLEVBQUssRUFBSUgsRUFBRzFKLFFBQVEsVUFBWSxFQUFJMEosRUFBRzFKLFFBQVEsWUFBYThKLEVBQVMsaUJBQWtCaFIsRUFBUWlSLEVBQVcsWUFBWW5FLEtBQUs4RCxHQUFLTSxFQUFTLFVBQVVwRSxLQUFLOEQsS0FBUUssRUFBVUUsRUFBVTlRLEVBQW9CLEdBQ2hXWixFQUFPRCxRQUFVLFNBQVN3QixFQUFVb1EsRUFBVzVQLEVBQVNHLEdBQ3BESCxFQUFVQSxHQUFXSCxLQUFLRyxRQUFTRyxFQUFPQSxHQUFRTixLQUFLTSxLQUN2RCxJQUE0RjBQLEVBQVdDLEVBQXdGQyxFQUEzTHZKLEVBQVkzRyxLQUFNQyxFQUFLRCxLQUFLQyxHQUFJWSxFQUFRYixLQUFLYSxRQUFVYixLQUFLYSxNQUFRUCxFQUFLUSxjQUErQnFQLEdBQW9CLEVBQUlDLEdBQWlCLEVBQUlDLEdBQWtCLEVBQUlDLEdBQVksRUFBZUMsR0FBYSxFQUFJQyxPQUFzQixFQUNqUCxTQUFTQyxFQUFnQkMsRUFBYUMsRUFBWUMsRUFBYUMsRUFBT0MsR0FDbEUsSUFBSTdPLEVBQVMzQixFQUFLMkIsT0FDbEI2TyxJQUFzQnhRLEVBQUsyQixRQUFTLEdBQUswTyxFQUFhQSxHQUFjLEVBQ3BFLElBQXVCSSxFQUFvQnRGLEVBQU11RixFQUFTQyxFQUF0REMsRUFBZSxHQUFlN0MsRUFBTSxFQUN4QyxFQUFHLENBQ0MsSUFBSSxJQUFPcUMsR0FBZXZRLEVBQVE4SSxlQUFlb0YsR0FDakQ1QyxHQUR1RHVGLEVBQVVGLElBQXFCLElBQU8zUSxFQUFROEksZUFBZW9GLEdBQUt6RSxNQUFNaUMsa0JBQWUsSUFBVzFMLEVBQVE4SSxlQUFlb0YsRUFBTSxNQUFPLElBQU9sTyxFQUFROEksZUFBZW9GLEdBQUs4QyxnQkFBa0JoUixFQUFROEksZUFBZW9GLEdBQUsrQyxPQUFTOVEsRUFBSzZDLDJCQUE2QixFQUFJa0wsR0FBT2dELEVBQXNCaEQsRUFBS2lELEVBQVNqRCxFQUFLMEMsRUFBVzFDLEVBQU0sSUFBTWxPLEVBQVE4SSxlQUFlb0YsSUFDNVl6RSxNQUFPbUgsRUFBWUMsRUFBUU8sUUFBUUMsUUFBU04sRUFBYTVFLE1BQUssSUFBT3NFLEVBQWNJLEVBQVFJLE9BQVEsSUFBT1IsRUFBY25GLEVBQUtPLFVBQVl5RixFQUFlcEQsRUFBSzVDLFFBQWEsQ0FDaklBLEdBQXBEdUYsRUFBVVUsRUFBZ0JyRCxFQUFLMEMsRUFBVzFDLEVBQU0sSUFBbUJ6RSxNQUFPbUgsRUFBWUMsRUFBUU8sUUFBUUMsUUFDdEcsSUFBSXROLEdBQWEsSUFBTzJNLEtBQVUsSUFBT3ZRLEVBQUs0RCxXQUFhNUQsRUFBSzRELFdBQWF1SCxFQUFLMkIsTUFDbEY2RCxFQUFrQkEsR0FBbUJ4RixFQUFLRyxRQUFVSCxFQUFLTSxNQUFRekwsRUFBS2tELGdCQUFrQixPQUFTaUksRUFBS0UsSUFBTXhMLEVBQVE4SSxlQUFlb0YsRUFBTSxJQUFNNUMsRUFBS0csUUFBVUgsRUFBS00sTUFBUXpMLEVBQUtrRCxnQkFBa0IsT0FBU2lJLEVBQUtFLE1BQzdMLElBQU96SCxRQUFjLElBQVdBLEdBQWMsaUJBQW1CQSxHQUFjeU4sU0FBU3pOLElBQWVtSyxFQUFNbkssRUFBYWdOLEVBQWE1RSxNQUFLLElBQU9zRSxFQUFjbkYsRUFBS08sVUFBWXlGLEVBQWVwRCxFQUFLNUMsSUFBU3dGLEdBQWtCLEVBRXhQNUMsZ0JBQ00sSUFBVzZCLEdBQWE3QixFQUFNNkIsTUFBZSxJQUFPekUsRUFBS0csUUFBVSxLQUFPSCxFQUFLTSxNQUFRc0MsRUFBTXNDLEdBQ3ZHLE1BQU8sS0FBT08sRUFBYUEsRUFBYXpLLE9BQVMsSUFBTXlLLEVBQWF2SCxPQUFPLElBQU9pSCxRQUFlLElBQVd6USxFQUFRbUosYUFBZW5KLEVBQVFtSixXQUFhK0UsRUFBTSxHQUM5Si9OLEVBQUsyQixPQUFTQSxFQUFRaVAsRUFFMUIsU0FBU1UsRUFBYUMsR0FDbEIxUixFQUFRZ0osWUFBUyxHQUFRLElBQU8wSSxJQUFTMVIsRUFBUThJLGVBQWlCLEdBQUk5SSxFQUFRNEYsRUFBSSxHQUV0RixTQUFTK0wsRUFBcUJDLEVBQVd6RCxFQUFRckYsR0FDN0MsSUFBSStJLEdBQVUsRUFBR0MsR0FBUyxFQUFHQyxFQUFTakosR0FBa0I5SSxFQUFROEksZUFDaEUsSUFBSyxJQUFJa0osVUFBVSxJQUFXSixJQUFjQSxHQUFhLEdBQUlHLEVBQVEsQ0FDakUsSUFBSUUsRUFBUWxGLFNBQVNpRixHQUNyQkQsRUFBT0UsS0FBVzlELElBQVUsSUFBTzRELEVBQU9FLEdBQU9qQixrQkFBb0JpQixHQUFTTCxJQUFjQyxFQUFTSSxHQUNyR0wsR0FBYUssSUFBVUgsRUFBUUcsSUFFbkMsT0FBUSxJQUFNSixHQUFVQSxHQUFVRCxFQUFZRSxHQUFTLEdBQUtBLEVBQVFELEVBQVNELEVBQVlDLEVBQVNDLEVBQVFGLEVBQVlDLEVBQVNDLEVBRW5JLFNBQVNJLEVBQWlCQyxHQUN0QixJQUFJQyxFQUFnQkQsRUFBSWYsUUFBUWUsRUFBSUUsYUFDcEMsTUFBTyxpQkFBbUJELEdBQWlCLEVBQUlBLEVBQWM5TCxTQUFXOEwsRUFBZ0JBLEVBQWN6SixNQUFNLEtBQUssU0FDakgsSUFBV3lKLEVBQWdCQSxFQUFjRSxXQUFhLEdBRTFELFNBQVNDLEVBQVdKLEVBQUtLLEdBQ3JCLElBQUlwQixHQUFXLE1BQVFlLEVBQUlFLFlBQWNGLEVBQUlNLEtBQUtQLEVBQWlCQyxJQUFRQSxFQUFJZixTQUFTdEosS0FBSyxJQUM3RixHQUFJLEtBQU9zSixFQUFTLEtBQU1BLEVBQVE5SyxPQUFTa00sR0FBU3BCLEdBQVcsSUFDL0QsT0FBT0EsRUFFWCxTQUFTRixFQUFzQmhELEVBQUtqRixHQUVoQyxJQUFLLElBQWlFeUosRUFBWUMsRUFBU0MsRUFBMURDLEVBQWdCTixFQUE5Qk8sRUFEbkI1RSxFQUFNLEVBQUlBLEVBQU1BLEVBQU0sRUFBSSxJQUM0RS9JLEVBQU0sRUFBR0EsRUFBTThELEVBQU0zQyxPQUFRbkIsSUFBTyxDQUN0SSxJQUFJZ04sRUFBTWxKLEVBQU05RCxHQUNoQnVOLEVBQWFILEVBQVdKLEVBQUtVLEVBQWN2TSxRQUMzQyxJQUFJeU0sRUFBV0MsS0FBS0MsSUFBSVAsRUFBYUcsU0FDcEMsSUFBV0YsR0FBVyxLQUFPRCxHQUFjSyxFQUFXSixHQUFXQyxJQUFjelMsRUFBSzJCLFFBQVU4USxFQUFVbkosTUFBTWlDLGFBQWUsV0FBYWtILEVBQVVuSixNQUFNa0Msa0JBQW9Cd0csRUFBSTFJLE1BQU1pQyxjQUFnQnlHLEVBQUkxSSxNQUFNa0MsaUJBQW1CaUgsR0FBYUEsRUFBVW5KLE1BQU15SixxQkFBdUJmLEVBQUkxSSxNQUFNeUosc0JBQXdCUCxFQUFVSSxFQUN0VUgsRUFBWVQsR0FFaEIsT0FBT1MsRUFFWCxTQUFTckIsRUFBZ0JyRCxFQUFLMEMsRUFBV3VDLEdBQ3JDLE9BQU9uVCxFQUFROEksZUFBZW9GLElBQVFnRCxFQUFzQmhELEVBQUtpRCxFQUFTakQsRUFBSzBDLEVBQVlBLEVBQVVTLFFBQVVULEVBQVd1QyxJQUU5SCxTQUFTTCxFQUFRNUUsRUFBS2pGLEdBQ2xCLE9BQU9qSixFQUFROEksZUFBZW9GLEdBQU9sTyxFQUFROEksZUFBZW9GLElBQVFqRixHQUFTa0ksRUFBU2pELElBQU0sR0FFaEcsU0FBU2tGLEVBQTJCbEYsRUFBS21GLEVBQWdCbFQsR0FDckQsSUFBSyxJQUFJbVQsR0FBUSxFQUFJckssRUFBUWtJLEVBQVNqRCxHQUFNcUYsRUFBTyxFQUFHQSxFQUFPdEssRUFBTTNDLE9BQVFpTixJQUFRLENBQy9FLEdBQUl0SyxFQUFNc0ssR0FBTTlKLFVBQVlSLEVBQU1zSyxHQUFNOUosTUFBTW9DLFlBQWN3SCxFQUFlNUosTUFBTXRKLEVBQUtvRSxlQUFpQixNQUFRLGNBQWdCcEUsRUFBS29FLGdCQUFrQjhPLEVBQWU1SixNQUFNZ0MsU0FBV3hDLEVBQU1zSyxHQUFNOUosTUFBTW9DLFlBQWN3SCxFQUFlNUosTUFBTW9DLFdBQVksQ0FDblB5SCxHQUFRLEVBQ1IsTUFFSixHQUFJckssRUFBTXNLLEdBQU05SixPQUFTUixFQUFNc0ssR0FBTTlKLE1BQU1tQyxNQUFReUgsRUFBZTVKLE1BQU1vQyxVQUFXLENBQy9FeUgsT0FBUSxFQUNSLE9BR1IsT0FBTyxJQUFPQSxRQUFTLElBQVd0VCxFQUFRb0osVUFBVThFLEtBQVNvRixFQUFRRixFQUEyQmxGLEVBQU1sTyxFQUFRb0osVUFBVThFLEdBQU1tRixFQUFnQmxULElBQzlJbVQsRUFFSixTQUFTbkMsRUFBU2pELEVBQUswQyxFQUFXdUMsR0FDOUIsSUFBNEpLLEVBQXhKbkosRUFBYXJLLEVBQVE2SSxVQUFXZ0ksRUFBVUQsRUFBWXVDLEVBQVEsRUFBR00sRUFBaUI3QyxFQUFZQSxFQUFVUyxRQUFVLENBQUUsR0FBSzFHLEVBQVUsR0FBSStJLEdBQWEsRUFBaUJDLEVBQWtCL0MsRUFBWUEsRUFBVTlJLEtBQUssSUFBTSxHQUM1TixTQUFTOEwsRUFBcUIvSyxFQUFXNEssRUFBZ0JJLEVBQVNDLEdBQzlELFNBQVNDLEVBQVl0SyxFQUFPb0ssRUFBU0MsR0FDakMsU0FBU0UsRUFBYVIsRUFBYVMsR0FDL0IsSUFBSUMsRUFBYSxJQUFNOVUsRUFBRStVLFFBQVFYLEVBQWFTLEVBQVd0SixTQUN6RCxPQUFPdUosR0FBYzlVLEVBQUU4RixLQUFLK08sRUFBV3RKLFFBQVMsU0FBU3hGLEVBQUtzRSxHQUMxRCxJQUFJLElBQU9BLEVBQU1nQixhQUFleUosRUFBYUYsRUFBYVIsRUFBYVMsRUFBV3RKLFFBQVF4RixFQUFNLElBQU1pQixPQUFPakgsVUFBVXFPLGVBQWU5SyxLQUFLK0csRUFBTyxhQUFleUssRUFBYUYsRUFBYVIsRUFBYS9KLElBQ3hNeUssRUFBWSxPQUFPLElBQ25CQSxFQUVSLFNBQVNFLEVBQXNCbEcsRUFBS21HLEVBQWNDLEdBQzlDLElBQUkxQixFQUFXMkIsRUFDZixJQUFLdlUsRUFBUWlKLE1BQU1pRixJQUFRbE8sRUFBUThJLGVBQWVvRixLQUFTOU8sRUFBRThGLEtBQUtsRixFQUFRaUosTUFBTWlGLElBQVEsQ0FBRWxPLEVBQVE4SSxlQUFlb0YsSUFBUSxTQUFTL0ksRUFBSzJHLEdBQ25JLEdBQUlBLEVBQUsyRyxLQUFLNEIsR0FBZSxPQUFPekIsRUFBWTlHLEdBQU0sRUFDdEQsSUFBSXVHLE9BQWMsSUFBV2lDLEVBQW9CQSxFQUFvQnhJLEVBQUt1RyxZQUFhbUMsT0FBUyxJQUFXMUksRUFBS3NGLFFBQVFpQixHQUFldkcsRUFBS3NGLFFBQVFpQixHQUFhQyxXQUFXNU0sUUFBUTJPLElBQWlCLFFBQ3BNLElBQVdFLEdBQVlDLEVBQVNELEtBQWMsSUFBTUMsSUFBVzVCLEVBQVk5RyxFQUM1RXlJLEVBQVdDLEtBQ1g1QixFQUFXLENBQ1gsSUFBSTZCLEVBQW9CN0IsRUFBVXhCLFFBQVF3QixFQUFVUCxhQUNwRCxPQUQ0RU8sRUFBVUgsS0FBSzRCLElBQWlCekIsRUFBVUgsS0FBS2dDLElBQXNCN0IsRUFBVXhCLFNBQzVJQyxZQUFPLElBQVdpRCxFQUFvQkEsRUFBb0IxQixFQUFVUCxhQUFlLEdBRXRHLFlBQU8sSUFBV2lDLEVBQW9CRixFQUFzQmxHLEVBQUttRyxRQUFnQixFQUVyRixTQUFTSyxFQUFXQyxFQUFRQyxHQUN4QixTQUFTQyxFQUFPQyxHQUNaLElBQUssSUFBK0JDLEVBQTNCQyxFQUFXLEdBQUlDLEdBQVMsRUFBUTFXLEVBQUksRUFBR2tRLEVBQUlxRyxFQUFReE8sT0FBUS9ILEVBQUlrUSxFQUFHbFEsSUFBSyxHQUFJLE1BQVF1VyxFQUFRckksT0FBT2xPLEdBQUksSUFBS3dXLEVBQU1ELEVBQVFJLFdBQVczVyxFQUFJLEtBQU0wVyxFQUFRRixHQUFPQyxFQUFTN0ksS0FBS2dKLE9BQU9DLGFBQWFILFNBQWNBLEVBQVFILEVBQVFJLFdBQVczVyxHQUNqUHlXLEVBQVM3SSxLQUFLMkksRUFBUXJJLE9BQU9sTyxJQUM3QixPQUFPeVcsRUFBU2xOLEtBQUssSUFFekIsT0FBTzZNLEVBQU9sTCxNQUFNbUMsTUFBUWdKLEVBQU9uTCxNQUFNb0MsZUFBaUIxTCxFQUFLcUIsT0FBU21ULEVBQU9sTCxNQUFNK0IsY0FBYzNELFFBQVUrTSxFQUFPbkwsTUFBTStCLGNBQWMzRCxVQUFXLElBQU84TSxFQUFPbEwsTUFBTWdDLFNBQVUsSUFBT21KLEVBQU9uTCxNQUFNZ0MsVUFBWSxJQUFNb0osRUFBT0QsRUFBT25MLE1BQU0rQixHQUFHOEcsV0FBV3hNLFFBQVEsVUFBVyxLQUFLSixRQUFRbVAsRUFBT0YsRUFBT2xMLE1BQU0rQixHQUFHOEcsV0FBV3hNLFFBQVEsVUFBVyxNQUtsVixTQUFTdVAsRUFBaUJDLEVBQWFDLEdBQ25DLElBQUlDLEVBQWlCRixFQUFZakQsWUFBYW9ELE9BQWMsSUFBV0YsR0FBWUMsSUFBbUJELEVBQVNsRCxjQUFnQixJQUFNaUQsRUFBWWxFLFFBQVFvRSxHQUFnQmxELFdBQVc1TSxRQUFRNlAsRUFBU25FLFFBQVFvRSxJQUM3TSxJQUFLQyxHQUFlRCxFQUFpQkQsRUFBU2xELFlBQWEsSUFBSyxJQUFJOVQsRUFBSWdYLEVBQVNsRCxZQUFhOVQsRUFBSWlYLEVBQWdCalgsSUFBSyxHQUFJK1csRUFBWWxFLFFBQVE3UyxLQUFPZ1gsRUFBU25FLFFBQVE3UyxHQUFJLENBQ3ZLaVgsRUFBaUJqWCxFQUFHa1gsR0FBYyxFQUNsQyxNQUVKLEdBQUlBLEVBQWEsQ0FDYkgsRUFBWTdDLEtBQU82QyxFQUFZN0MsTUFBUSxHQUN2QyxJQUFJaUQsRUFBU0osRUFBWWxFLFFBQVFvRSxHQUNqQyxRQUFJLElBQVdFLEVBQVEsQ0FDbkIsR0FBSSxpQkFBbUJBLElBQVdBLEVBQVNBLEVBQU8vTSxNQUFNLEtBQUssU0FBSyxJQUFXMk0sRUFBWTdDLEtBQUtpRCxLQUFZSixFQUFZN0MsS0FBS2lELEdBQVVKLEVBQVlsRSxRQUFRQyxjQUN6SixJQUFXa0UsRUFBVSxDQUNqQixJQUFLLElBQUlwUSxLQUFPb1EsRUFBUzlDLEtBQU0saUJBQW1CdE4sSUFBUUEsRUFBTUEsRUFBSXdELE1BQU0sS0FBSyxTQUMvRSxJQUFXMk0sRUFBWTdDLEtBQUt0TixLQUFTbVEsRUFBWTdDLEtBQUt0TixHQUFPb1EsRUFBUzlDLEtBQUt0TixJQUMzRW1RLEVBQVlsRSxRQUFRb0UsR0FBa0JwUCxPQUFPQyxLQUFLaVAsRUFBWTdDLE1BQU0zSyxLQUFLLEtBRTdFLE9BQU8sRUFFWHdOLEVBQVlqRCxpQkFBYyxFQUU5QixPQUFPLEVBRVgsU0FBU3NELEVBQVlMLEVBQWFDLEdBQzlCLEdBQUlELEVBQVlsRSxRQUFROUssU0FBV2lQLEVBQVNuRSxRQUFROUssT0FBUSxPQUFPLEVBQ25FLElBQUssSUFBSW9QLEVBQVNKLEVBQVlqRCxZQUFjLEVBQUdxRCxFQUFTSixFQUFZbEUsUUFBUTlLLE9BQVFvUCxJQUFVLEdBQUlKLEVBQVlsRSxRQUFRc0UsS0FBWUgsRUFBU25FLFFBQVFzRSxHQUFTLE9BQU8sRUFDbkssT0FBTyxFQUVYLEdBQUk3RSxFQUFVMVEsRUFBS2Msa0JBQWUsSUFBVzZTLEVBQW1CLEtBQU0sc0pBQXdKOVQsRUFBUWUsS0FDdE8sR0FBSThQLElBQVkzQyxRQUFPLElBQVd6RSxFQUFNa0IsUUFBUyxPQUFPQSxFQUFRd0IsS0FBSyxDQUNqRTFDLE1BQU9BLEVBQ1AySCxRQUFTeUMsRUFBUWpMLFVBQ2pCZ04sR0FBSWpDLEVBQ0psQixLQUFNLE1BQ04sRUFDSixRQUFJLElBQVdoSixFQUFNa0IsU0FDakIsR0FBSWxCLEVBQU1jLFNBQVd1SixJQUFzQnJLLEdBQ3ZDLEdBQUlBLEVBQVFzSyxFQUFZbEwsRUFBVThCLFFBQVF2TCxFQUFFK1UsUUFBUTFLLEVBQU9aLEVBQVU4QixTQUFXLEdBQUlrSixFQUFTQyxHQUN0RixPQUFPLE9BQ1gsR0FBSXJLLEVBQU1lLFdBQVksQ0FDekIsSUFBSXFMLEVBQWdCcE0sRUFBT3FNLEVBQVduTCxFQUFRckUsT0FDOUMsR0FBSW1ELEVBQVFtSyxFQUFxQm5LLEVBQU9nSyxFQUFnQkksRUFBU0MsR0FDMUQsQ0FDSCxHQUFJMVUsRUFBRThGLEtBQUt5RixFQUFTLFNBQVN4RixFQUFLNFEsR0FDOUJELEdBQVkzUSxJQUFRNFEsRUFBS3RNLE1BQU1pQyxhQUFjLEtBQzdDOEgsRUFBYzdJLEVBQVFBLEVBQVFyRSxPQUFTLEdBQUdtRCxXQUFPLElBQVdxSyxJQUFzQkUsRUFBYVIsRUFBYXFDLEdBQWdCLE9BQU8sRUFDdkluQyxHQUFhLEVBQUk3QyxFQUFVM0MsUUFFNUIsR0FBSXpFLEVBQU1pQixhQUFjLENBQzNCLElBQW9Ec0wsRUFBaERDLEVBQWlCeE0sRUFBT3lNLEVBQW9CLEdBQWlCQyxFQUFpQnhMLEVBQVEwRyxRQUFTK0UsRUFBYXZDLEVBQVF2TixPQUFRK1AsRUFBVyxFQUFJNUMsRUFBZW5OLE9BQVNtTixFQUFlNkMsU0FBVyxFQUNqTSxJQUFLLElBQU1ELEdBQVksaUJBQW1CQSxFQUFVLENBQ2hELElBQTBGRSxFQUF0RkMsRUFBYTNGLEVBQVM0RixFQUFzQmhELEVBQWVwQyxRQUFTcUYsRUFBYyxHQUN0RixHQUFJLGlCQUFtQkwsRUFBVUssRUFBY0wsRUFBUzFOLE1BQU0sVUFBVyxJQUFLNE4sRUFBUSxFQUFHQSxFQUFRTixFQUFldEwsUUFBUXJFLE9BQVFpUSxJQUFTRyxFQUFZdkssS0FBS29LLEVBQU1qRSxZQUNoSyxRQUFJLElBQVd0UyxFQUFRa0osU0FBU2dGLEdBQU0sQ0FDbEMsSUFBSyxJQUFJeUksRUFBbUJELEVBQVlyRixRQUFTOVMsRUFBSSxFQUFHcVksRUFBTTVXLEVBQVFrSixTQUFTZ0YsR0FBSzVILE9BQVEvSCxFQUFJcVksRUFBS3JZLElBQUssQ0FDdEcsSUFBSXNZLEVBQWE3VyxFQUFRa0osU0FBU2dGLEdBQUszUCxHQUFHK1QsV0FBVzNKLE1BQU0sS0FDM0RrTCxFQUFRdk4sUUFBVXVRLEVBQVcsSUFBTUgsRUFBWW5MLE9BQU9tTCxFQUFZaFIsUUFBUW1SLEVBQVcsSUFBSyxHQUU5RixJQUFNSCxFQUFZcFEsZ0JBQWtCdEcsRUFBUWtKLFNBQVNnRixHQUFNd0ksRUFBY0MsS0FFNUUsSUFBT3hXLEVBQUttRCxZQUFja08sU0FBU3pFLFNBQVM1TSxFQUFLbUQsY0FBZ0JrVCxHQUFjclcsRUFBS21ELGNBQWdCb1QsRUFBY0EsRUFBWXJGLE1BQU0sRUFBRyxJQUN4SSxJQUFLLElBQUl5RixHQUF1QixFQUFJM1IsRUFBTSxFQUFHQSxFQUFNdVIsRUFBWXBRLE9BQVFuQixJQUFPLENBQzFFb1IsRUFBUXhKLFNBQVMySixFQUFZdlIsSUFBT3dGLEVBQVUsR0FBSThJLEVBQWlCLGlCQUFtQjRDLEdBQVlqQyxFQUFzQnZELEVBQVMwRixFQUFPSCxJQUFlSyxFQUFvQnBGLFFBQzNLNEUsRUFBZXRMLFFBQVE0TCxJQUFVeEMsRUFBWWtDLEVBQWV0TCxRQUFRNEwsR0FBUSxDQUFFQSxHQUFRUSxPQUFPbEQsR0FBVUMsR0FBcUJySyxHQUFRLEVBQUssSUFBTXRFLElBQVEyUixHQUF1QixHQUM5S2QsRUFBY3JMLEVBQVEwRyxRQUFTUixFQUFVMkYsRUFBWTdMLEVBQVUsR0FDL0QsSUFBSyxJQUFJcU0sRUFBTyxFQUFHQSxFQUFPaEIsRUFBWTFQLE9BQVEwUSxJQUFRLENBQ2xELElBQUl6QixFQUFXUyxFQUFZZ0IsR0FBT0MsR0FBWSxFQUM5QzFCLEVBQVM5TCxNQUFNd0QsSUFBTXNJLEVBQVM5TCxNQUFNd0QsS0FBTzZKLEVBQXNCdkIsRUFBU2xELFlBQWNrRCxFQUFTbEQsYUFBZStELEVBQ2hIZixFQUFpQkUsR0FDakIsSUFBSyxJQUFJMkIsRUFBTyxFQUFHQSxFQUFPaEIsRUFBa0I1UCxPQUFRNFEsSUFBUSxDQUN4RCxJQUFJQyxFQUFZakIsRUFBa0JnQixHQUNsQyxHQUFJLGlCQUFtQmIsUUFBWSxJQUFXZCxFQUFTbEQsY0FBZ0IsSUFBTWpULEVBQUUrVSxRQUFRb0IsRUFBU25FLFFBQVFtRSxFQUFTbEQsYUFBYUMsV0FBWW9FLEdBQWMsQ0FDcEosR0FBSW5CLEVBQVM5TCxNQUFNb0MsWUFBY3NMLEVBQVUxTixNQUFNb0MsVUFBVyxDQUN4RG9MLEdBQVksRUFBSTVCLEVBQWlCOEIsRUFBVzVCLEdBQzVDLE1BRUosR0FBSWIsRUFBV2EsRUFBVTRCLEdBQVksQ0FDakM5QixFQUFpQkUsRUFBVTRCLEtBQWVGLEdBQVksRUFBSWYsRUFBa0IzSyxPQUFPMkssRUFBa0J4USxRQUFReVIsR0FBWSxFQUFHNUIsSUFDNUgsTUFFSixHQUFJYixFQUFXeUMsRUFBVzVCLEdBQVcsQ0FDakNGLEVBQWlCOEIsRUFBVzVCLEdBQzVCLE1BRUosR0F0RmNYLEVBc0Z5QnVDLEdBckZ4RCxLQUR1QnhDLEVBc0Z1QlksR0FyRmhDOUwsTUFBTWdDLFNBQVUsSUFBT21KLEVBQU9uTCxNQUFNZ0MsUUFBVW1KLEVBQU9uTCxNQUFNK0IsR0FBR0YsS0FBS3FKLEVBQU9sTCxNQUFNbUMsSUFBSzVMLEVBQVNrTyxHQUFLLEVBQUkvTixHQUFNLEdBcUZ2RCxDQUMvQ3dWLEVBQVlKLEVBQVU0QixTQUFjLElBQVdyWCxFQUFHMEcsVUFBVWhHLFlBQVk4QyxXQUFhK1IsRUFBaUJFLEVBQVU0QixLQUFlRixHQUFZLEVBQzNJZixFQUFrQjNLLE9BQU8ySyxFQUFrQnhRLFFBQVF5UixHQUFZLEVBQUc1QixJQUFhcFYsRUFBS21ELFlBQWEsRUFDakcsUUFJWjJULEdBQWFmLEVBQWtCL0osS0FBS29KLElBRzVDNUssRUFBVXdMLEVBQWVZLE9BQU9iLEdBQW9CckYsRUFBVTNDLEVBQUt3RixFQUFhLEVBQUkvSSxFQUFRckUsT0FDNUZtRCxFQUFRLEVBQUl5TSxFQUFrQjVQLE9BQVFtTixFQUFpQmdELEVBQW9CcEYsYUFDeEU1SCxFQUFRc0ssRUFBWWtDLEVBQWV0TCxRQUFRMEwsSUFBYXhOLEVBQVU4QixRQUFRMEwsR0FBVyxDQUFFQSxHQUFXVSxPQUFPbEQsR0FBVUMsR0FDMUgsR0FBSXJLLEVBQU8sT0FBTyxPQUNmLEdBQUlBLEVBQU1nQixjQUFnQnFKLElBQXNCakwsRUFBVThCLFFBQVF2TCxFQUFFK1UsUUFBUTFLLEVBQU9aLEVBQVU4QixTQUFXLEdBQUksSUFBSyxJQUFJK0MsRUFBS2pFLEVBQU8yTixFQUFPLEVBQUkzRCxFQUFlbk4sT0FBU21OLEVBQWU2QyxRQUFVLEVBQUdjLEdBQVF0SyxNQUFNWSxFQUFHNUMsV0FBV0UsS0FBT29NLEVBQU8sRUFBSTFKLEVBQUc1QyxXQUFXRSxNQUFRNkYsR0FBVzNDLEVBQUtrSixJQUFRLENBQy9SLElBQUluRCxFQUFhcEwsRUFBVThCLFFBQVF2TCxFQUFFK1UsUUFBUXpHLEVBQUk3RSxFQUFVOEIsU0FBVyxHQUN0RSxHQUFJbEIsRUFBUXNLLEVBQVlFLEVBQVksQ0FBRW1ELEdBQU9MLE9BQU9sRCxHQUFVSSxHQUFvQixDQUM5RSxJQUFJVCxFQUFjN0ksRUFBUUEsRUFBUXJFLE9BQVMsR0FBR21ELE9BQW1CeUosbUJBQXFCa0UsR0FBUTFKLEVBQUc1QyxXQUFXQyxJQUM1R3lJLEVBQVl2RyxLQUFPbUssR0FBUSxHQUFLbkQsRUFBV3RKLFFBQVFqRixRQUFROE4sSUFBZ0I5RixFQUFHNUMsV0FBV21DLElBQ3pGdUcsRUFBWU4sb0JBQXNCYyxFQUFhUixFQUFhUyxHQUFhLENBQ3JFUCxHQUFhLEVBQUk3QyxFQUFVM0MsRUFDM0IsTUFFSixPQUFPc0YsRUFBWXZHLE1BQVFqTixFQUFRb0osVUFBVThFLEdBQU8rRixFQUFXdEosUUFBUXJFLE9BQVMyTixFQUFXdEosUUFBUWpGLFFBQVE4TixLQUMzRyxRQUVELEdBQUkvSixFQUFRbUssRUFBcUJuSyxFQUFPZ0ssRUFBZ0JJLEVBQVNDLEdBQ2pFLE9BQU8sT0FDWGpELElBbEhQLElBQWtDOEQsRUFBUUMsRUFvSDlDLElBQUssSUFBSXJCLEVBQU8sRUFBSUUsRUFBZW5OLE9BQVNtTixFQUFlNkMsUUFBVSxFQUFHL0MsRUFBTzFLLEVBQVU4QixRQUFRckUsT0FBUWlOLElBQVEsSUFBSSxJQUFPMUssRUFBVThCLFFBQVE0SSxHQUFNOUksYUFBYyxDQUM5SixJQUFJaEIsRUFBUXNLLEVBQVlsTCxFQUFVOEIsUUFBUTRJLEdBQU8sQ0FBRUEsR0FBT3dELE9BQU9sRCxHQUFVQyxHQUMzRSxHQUFJckssR0FBU29ILElBQVkzQyxFQUFLLE9BQU96RSxFQUNyQyxHQUFJeUUsRUFBTTJDLEVBQVMsT0FVM0IsSUFBSyxFQUFJM0MsU0FBUSxJQUFXNkIsR0FBYTdCLEVBQU02QixHQUFZLENBQ3ZELFFBQUksSUFBV2EsRUFBVyxDQUN0QixJQUFLLElBQTJCdEYsRUFBdkIrTCxFQUFjbkosRUFBTSxPQUFTLEtBQVk1QyxFQUFPdEwsRUFBUThJLGVBQWV1TyxJQUFnQnJYLEVBQVFpSixNQUFNb08sTUFBa0IsRUFBSUEsR0FBZUEsU0FDbkosSUFBVy9MLElBQVMsRUFBSStMLElBQWdCNUQsRUFWaEQsU0FBdUJ2RixFQUFLakYsR0FDeEIsSUFBSW1JLEVBQVUsR0FDZCxPQUFPaFMsRUFBRWlLLFFBQVFKLEtBQVdBLEVBQVEsQ0FBRUEsSUFBVSxFQUFJQSxFQUFNM0MsY0FBVyxJQUFXMkMsRUFBTSxHQUFHb0osY0FBZSxJQUFPbFMsRUFBS21ELFdBQ3BILEtBRGtJOE4sRUFBVUYsRUFBc0JoRCxFQUFLakYsRUFBTW9JLFNBQVNELFFBQVFDLFNBQ2hML0ssU0FBVzhLLEVBQVVuSSxFQUFNLEdBQUdtSSxRQUFRQyxTQUFZalMsRUFBRThGLEtBQUsrRCxFQUFPLFNBQVM5RCxFQUFLZ04sR0FDeEYsR0FBSSxLQUFPQSxFQUFJdkcsSUFBSyxHQUFJLElBQU13RixFQUFROUssT0FBUThLLEVBQVVlLEVBQUlmLFFBQVFDLGFBQWMsSUFBSyxJQUFJOVMsRUFBSSxFQUFHQSxFQUFJNlMsRUFBUTlLLE9BQVEvSCxJQUFLNFQsRUFBSWYsUUFBUTdTLEtBQU8sSUFBTTZTLEVBQVE3UyxHQUFHK1QsV0FBVzVNLFFBQVF5TSxFQUFJZixRQUFRN1MsTUFBUTZTLEVBQVE3UyxJQUFNLElBQU00VCxFQUFJZixRQUFRN1MsT0FDck82UyxFQUt3RGtHLENBQWNELEVBQWEvTCxHQUNwRnFJLEVBQWtCRixFQUFlM0wsS0FBSyxJQUFLK0ksRUFBVXdHLEdBRXpELEdBQUlyWCxFQUFRaUosTUFBTWlGLElBQVFsTyxFQUFRaUosTUFBTWlGLEdBQUssR0FBRzBILEtBQU9qQyxFQUFpQixPQUFPM1QsRUFBUWlKLE1BQU1pRixHQUM3RixJQUFLLElBQUlxSixFQUFROUQsRUFBZTZDLFFBQVNpQixFQUFRbE4sRUFBVy9ELE9BQVFpUixJQUFTLENBRXpFLEdBRFkzRCxFQUFxQnZKLEVBQVdrTixHQUFROUQsRUFBZ0IsQ0FBRThELEtBQ3pEMUcsSUFBWTNDLEdBQU9BLEVBQU0yQyxFQUFTLE9BR3ZELE9BQU8sSUFBTWxHLEVBQVFyRSxTQUFXb04sR0FBYy9JLEVBQVF3QixLQUFLLENBQ3ZEMUMsTUFBTyxDQUNIK0IsR0FBSSxLQUNKQyxRQUFRLEVBQ1JDLGFBQWEsRUFDYnRILE9BQVEsS0FDUndILElBQUssR0FDTDFLLFlBQWEsSUFFakJrUSxRQUFTLEdBQ1RxQixLQUFNLEdBQ05tRCxHQUFJakMsU0FDSixJQUFXL0MsR0FBYTVRLEVBQVFpSixNQUFNaUYsR0FBTzlPLEVBQUVnQixRQUFPLEVBQUksR0FBSXVLLElBQVkzSyxFQUFRaUosTUFBTWlGLEdBQU85TyxFQUFFZ0IsUUFBTyxFQUFJLEdBQUl1SyxHQUNwSDNLLEVBQVFpSixNQUFNaUYsSUFFbEIsU0FBU3NKLElBQ0wsWUFBTyxJQUFXeFgsRUFBUStJLFVBQVkvSSxFQUFRK0ksUUFBVXVILEdBQWdCLEVBQUksUUFDNUUsSUFBV3RRLEVBQVFnSixTQUFXaEosRUFBUWdKLE9BQVNoSixFQUFRK0ksUUFBUXNJLFVBQVdyUixFQUFRK0ksUUFFdEYsU0FBUzBPLEVBQVVDLEdBQ2YsWUFBTyxJQUFXMVgsRUFBUWdKLFNBQVUsSUFBTzBPLElBQVkxWCxFQUFRZ0osT0FBU3NILEdBQWdCLEVBQUlxQixLQUF3QixRQUNwSCxJQUFXM1IsRUFBUStJLFVBQVkvSSxFQUFRK0ksUUFBVS9JLEVBQVFnSixPQUFPcUksVUFBV3JSLEVBQVFnSixPQUV2RixTQUFTMk8sRUFBa0IxQyxFQUFPRixFQUFLL0wsR0FDbkMsSUFBSXpLLEVBQUdxSCxFQUFHNUMsRUFBNEI3QyxFQUFLNkMsMEJBQTJCNFUsRUFBT2xYLEVBQVFzSSxFQUFPcUksUUFBUXpJLFVBQVlJLEVBQ2hILEdBQUk3SSxFQUFLNkMsMEJBQTRCLElBQUksSUFBT2lTLEVBQU94RCxJQUFnQnpSLEVBQVFpSixNQUFRLEdBQ3ZGZ00sRUFBUSxFQUFHRixFQUFNL0wsRUFBTzFDLE9BQVFWLEVBQUlpUyxFQUEwQixDQUMxREMsTUFBTyxFQUNQL0MsSUFBSyxJQUNOLEdBQUkrQyxVQUFZLENBQ2YsSUFBS3ZaLEVBQUkwVyxFQUFPMVcsRUFBSXdXLEVBQUt4VyxXQUFZeUIsRUFBUThJLGVBQWV2SyxHQUM1RHFILEVBQUlxUCxFQUVSLElBQUk4QyxFQUFXLElBQUkzWSxFQUFFNFksTUFBTSxZQUMzQixJQUFLelosRUFBSTBXLEVBQU8xVyxFQUFJd1csRUFBS3hXLElBQUssQ0FDMUJ3WixFQUFTRSxNQUFRTCxFQUFLclosR0FBRytULFdBQVc0QyxXQUFXLEdBQUkvRSxHQUFZLEVBQy9ELElBQUkrSCxFQUFZQyxFQUFjQyxjQUFjMVYsS0FBSzVDLEVBQUlpWSxHQUFVLEdBQUksR0FBSSxFQUFJblMsSUFDM0UsSUFBT3NTLElBQWN0UyxFQUFJc1MsRUFBVUcsaUJBRXZDbFksRUFBSzZDLDBCQUE0QkEsRUFFckMsU0FBU29CLEVBQU9rVSxFQUFNaE4sRUFBTTRDLEdBQ3hCLE9BQVEvTixFQUFLaUUsUUFBVWtILEVBQUtsSCxRQUMxQixJQUFLLFFBQ0hrVSxFQUFPQSxFQUFLQyxjQUNaLE1BRUYsSUFBSyxRQUNIRCxFQUFPQSxFQUFLdlMsY0FDWixNQUVGLElBQUssUUFDSCxJQUFJeVMsRUFBWXhZLEVBQVE4SSxlQUFlb0YsRUFBTSxHQUM3Q29LLEVBQU8sSUFBTXBLLEdBQU9zSyxHQUFhQSxFQUFVdkgsUUFBVWtFLE9BQU9DLGFBQWF6RixFQUFROEksT0FBU0gsRUFBS0MsY0FBZ0JELEVBQUt2UyxjQUNwSCxNQUVGLFFBQ0UsR0FBSTNHLEVBQUVxRCxXQUFXdEMsRUFBS2lFLFFBQVMsQ0FDM0IsSUFBSXNVLEVBQU9DLE1BQU14WixVQUFVa1MsTUFBTTNPLEtBQUtrVyxXQUN0Q0YsRUFBS3ZNLEtBQUtuTSxFQUFROEksZ0JBQWlCd1AsRUFBT25ZLEVBQUtpRSxPQUFPeVUsTUFBTWhaLEtBQU02WSxJQUcxRSxPQUFPSixFQUVYLFNBQVNRLEVBQXNCQyxFQUFTQyxFQUFTQyxHQUM3QyxJQUFLLElBQXFIQyxFQUFqSEMsRUFBVWhaLEVBQUsyQixPQUFTa1gsRUFBVUEsRUFBUTNILE1BQU0sRUFBRyxHQUFJK0gsR0FBVSxFQUFJQyxPQUFRLElBQVdKLEVBQUtBLEVBQUd0USxNQUFNLEtBQU8sR0FBV3BLLEVBQUksRUFBR0EsRUFBSThhLEVBQU0vUyxPQUFRL0gsS0FBTSxLQUFPMmEsRUFBUUgsRUFBUXJULFFBQVEyVCxFQUFNOWEsTUFBUXdhLEVBQVF4TixPQUFPMk4sRUFBTyxHQUNuTyxJQUFLLElBQUlJLEVBQVEsRUFBR0EsRUFBUVAsRUFBUXpTLE9BQVFnVCxJQUFTLElBQUssSUFBTWxhLEVBQUUrVSxRQUFRNEUsRUFBUU8sR0FBUUgsR0FBVSxDQUNoR0MsR0FBVSxFQUNWLE1BRUosT0FBT0EsRUFFWCxTQUFTRyxFQUFVQyxFQUFTdEssRUFBR2YsRUFBUXNMLEVBQWFDLEVBQVNDLEdBQ3pELElBQXlHQyxFQUFTdkgsRUFBZ0R3SCxFQUFRQyxFQUFZdmIsRUFBR3diLEVBQVVDLEVBQThGbEMsRUFBTy9DLEVBQXBTa0YsRUFBZTdhLEVBQUVnQixRQUFPLEVBQUksR0FBSUosRUFBUThJLGdCQUFpQm9SLEVBQVc5YSxFQUFFZ0IsUUFBTyxFQUFJLEdBQUlKLEVBQVFpSixPQUE4QmtSLEdBQWMsRUFBSUMsR0FBYSxFQUFrREMsT0FBVSxJQUFXWCxFQUFVQSxFQUFVL0gsSUFDelAsR0FBSWdJLElBQWM3QixFQUFRNkIsRUFBVTdCLE1BQU8vQyxFQUFNNEUsRUFBVTVFLElBQUs0RSxFQUFVN0IsTUFBUTZCLEVBQVU1RSxNQUFRK0MsRUFBUTZCLEVBQVU1RSxJQUN0SEEsRUFBTTRFLEVBQVU3QixTQUFVLElBQU11QyxRQUFXLElBQVdYLEVBQ3REckgsR0FENEV5SCxFQUFhaEgsRUFBMUI4RyxFQUFVLElBQ2hEdkgsaUJBQWtCLEtBQU0sR0FBS2dJLEVBQVNBLElBQVcsSUFBSVIsRUFBUzdaLEVBQVE4SSxlQUFldVIsVUFDcEcsSUFBV1IsRUFBT3hILFlBQWEsQ0FDckMsR0FBSXlILEdBQWNBLEVBQVcxSSxRQUFReUksRUFBT3hILGVBQWlCd0gsRUFBT3pJLFFBQVF5SSxFQUFPeEgsYUFBYyxNQUNqR3VILEVBQVVTLEVBQVNoSSxFQUFjclMsRUFBUThJLGVBQWU4USxHQUFTdkgsWUFBYXlILEVBQWFELEVBRS9GLFFBQUksSUFBV3hILEVBQWEsQ0FDeEIySCxFQUFjak4sU0FBUzZNLEdBQVU1WixFQUFRa0osU0FBUzhRLEdBQWVoYSxFQUFRa0osU0FBUzhRLElBQWdCLElBQ2xHLElBQU9SLEdBQVd4WixFQUFRa0osU0FBUzhRLEdBQWE3TixLQUFLK0YsRUFBaUI0SCxHQUFjLElBQU1BLEVBQVd6SCxhQUNyRyxJQUFJaUksRUFBYyxHQUFJQyxHQUFhLEVBQ25DLElBQUtoYyxFQUFJeWIsRUFBYXpiLEVBQUlvVCxPQUFxQixHQUFRLEdBQU0sRUFBR3BULEtBQU0sSUFBTWdjLEdBQWFmLEdBQVdqYixRQUFLLElBQVcyUSxJQUFNb0wsRUFBWW5PLEtBQUsrQyxHQUMzSXFMLEVBQVlELEVBQVloVSxPQUFTLElBQUl5VCxFQUFXL1osRUFBUThJLGVBQWV2SyxNQUFnQixJQUFPd2IsRUFBUy9JLHNCQUFtQixJQUFXMkksR0FBYXBiLEVBQUl1WixHQUFTL0MsR0FBT3hXLElBQU0rYixFQUFZbk8sS0FBSzROLEVBQVM5SSxjQUMvTGpSLEVBQVE4SSxlQUFldkssR0FDOUIsS0FBTSxJQUFNZ2MsUUFBYSxJQUFXckwsSUFBTW9MLEVBQVluTyxLQUFLK0MsR0FBSXFMLEVBQVlELEVBQVloVSxPQUFTLFFBQUksSUFBV3RHLEVBQVFrSixTQUFTOFEsSUFBZ0JoYSxFQUFRa0osU0FBUzhRLEdBQWExVCxPQUFTLElBQU0sQ0FDekwsSUFBS3RHLEVBQVFpSixNQUFRLEdBQUl3SSxHQUFhLEdBQUswSSxHQUFjLEVBQUk1YixFQUFJLEVBQUdBLEVBQUkrYixFQUFZaFUsU0FDNUQ2VCxFQUFjalQsRUFEbUVpVCxFQUFZSyxPQUFTN0ksT0FBcUIsR0FBUSxHQUFNLEVBQ3pKMkksRUFBWS9iLElBQTBDLEVBQUlrYixHQUFhLElBQU1sYixJQUFLQSxJQUFNZ2MsSUFBY0gsRUFBYUQsR0FDM0gsR0FBS1gsR0FBV1csSUFBZ0JDLEVBQWEsQ0FDekNLLFNBQVVsYyxJQUVkLEdBQUk0YixFQUFhLE1BQ2pCLEdBQUkxSSxJQUFnQnFJLEVBQWFoSCxFQUFRa0gsR0FBY2hhLEVBQVE4SSxlQUFpQjFKLEVBQUVnQixRQUFPLEVBQUksR0FBSTZaLEdBQ2pHamEsRUFBUWlKLE1BQVE3SixFQUFFZ0IsUUFBTyxFQUFJLEdBQUk4WixJQUFZbGEsRUFBUWtKLFNBQVM4USxHQUFjLENBQ3hFSSxFQUFhYixFQUFVQyxFQUFTdEssRUFBR2YsRUFBUXNMLEVBQWFPLEVBQWMsRUFBR0wsR0FDekUsTUFFSixJQUFJdkgsRUFBZ0JGLEVBQWlCNEgsR0FDckMsSUFBSyxJQUFNOVosRUFBUWtKLFNBQVM4USxHQUFhdFUsUUFBUTBNLEVBQWdCLElBQU0wSCxFQUFXekgsYUFBYyxDQUM1RitILEVBQWFiLEVBQVVDLEVBQVN0SyxFQUFHZixFQUFRc0wsRUFBYU8sRUFBYyxFQUFHTCxHQUN6RSxNQUVKLElBQUszWixFQUFRa0osU0FBUzhRLEdBQWE3TixLQUFLaUcsRUFBZ0IsSUFBTTBILEVBQVd6SCxhQUN6RTlULEVBQUl5YixFQUFhemIsRUFBSW9ULE9BQXFCLEdBQVEsR0FBTSxFQUFHcFQsV0FBWXlCLEVBQVE4SSxlQUFldkssSUFHdEcsT0FBTzZiLElBQWMsSUFBT2phLEVBQUttRCxtQkFBcUJ0RCxFQUFRa0osU0FBUzhRLEdBQ3ZFSSxFQUVKLFNBQVNsVCxFQUFRZ0gsRUFBS2dCLEVBQUdmLEVBQVFzTCxFQUFhaUIsRUFBZUMsR0FDekQsU0FBU0MsRUFBWUMsR0FDakIsT0FBT25hLEVBQVEsRUFBSW1hLEVBQU8vQyxNQUFRK0MsRUFBTzlGLEtBQU84RixFQUFPL0MsTUFBUStDLEVBQU85RixLQUFPLEVBQUksRUFBSThGLEVBQU85RixJQUFNOEYsRUFBTy9DLE9BQVMrQyxFQUFPOUYsSUFBTThGLEVBQU8vQyxPQUFTLEVBRW5KM0osR0FBUyxJQUFPQSxFQUNoQixJQUFJcUwsRUFBVXRMLEVBQ2QsU0FBUzRNLEVBQXFCQyxHQUMxQixRQUFJLElBQVdBLEVBQVksQ0FDdkIsUUFBSSxJQUFXQSxFQUFXdFUsU0FBV3JILEVBQUVpSyxRQUFRMFIsRUFBV3RVLFVBQVlzVSxFQUFXdFUsT0FBUyxDQUFFc1UsRUFBV3RVLFNBQ3ZHckgsRUFBRThGLEtBQUs2VixFQUFXdFUsT0FBT3VVLEtBQUssU0FBUzNjLEVBQUc0YyxHQUN0QyxPQUFPQSxFQUFFL00sSUFBTTdQLEVBQUU2UCxNQUNqQixTQUFTL0ksRUFBSzJHLEdBQ2RvUCxFQUFlLENBQ1hwRCxNQUFPaE0sRUFDUGlKLElBQUtqSixFQUFPLE1BRWhCaVAsRUFBV3RVLFlBQVMsUUFBUyxJQUFXc1UsRUFBV0ksU0FBVy9iLEVBQUVpSyxRQUFRMFIsRUFBV0ksVUFBWUosRUFBV0ksT0FBUyxDQUFFSixFQUFXSSxTQUNwSS9iLEVBQUU4RixLQUFLNlYsRUFBV0ksT0FBT0gsS0FBSyxTQUFTM2MsRUFBRzRjLEdBQ3RDLE9BQU81YyxFQUFFNlAsSUFBTStNLEVBQUUvTSxNQUNqQixTQUFTL0ksRUFBSzJHLEdBQ2QsS0FBT0EsRUFBS29ELEdBQUtoSSxFQUFRNEUsRUFBS29DLElBQUtwQyxFQUFLb0QsT0FBRyxJQUFXcEQsRUFBS3FDLFFBQVVyQyxFQUFLcUMsWUFBUSxJQUFXckMsRUFBSzJOLFlBQWMzTixFQUFLMk4sWUFBY0EsS0FDbklzQixFQUFXSSxZQUFTLEdBQVNKLEVBQVdwRCxtQkFBcUJvRCxFQUFXL1IsT0FBUSxDQUNoRixJQUFJb1MsRUFBVUwsRUFBV3BELGtCQUN6QkEsR0FBa0IsSUFBT3lELEVBQVVBLEVBQVVBLEVBQVFuRyxNQUFPbUcsRUFBUXJHLElBQUtnRyxFQUFXL1IsUUFDcEYrUixFQUFXcEQsdUJBQW9CLE9BRW5DLElBQVdvRCxFQUFXTSxrQkFBb0I3QixFQUFVdUIsRUFBV00sZ0JBQy9ETixHQUFhLEdBRWpCLE9BQU9BLEVBRVgsU0FBU08sRUFBU2xRLEVBQVU4RCxFQUFHZixHQUMzQixJQUFJb04sR0FBTyxFQUNYLE9BQU9uYyxFQUFFOEYsS0FBS2lNLEVBQVMvRixHQUFXLFNBQVNqRyxFQUFLZ04sR0FDNUMsSUFBSTdHLEVBQU82RyxFQUFJMUksTUFDZixHQUFJZ08sR0FBVSxJQUdYLEtBSGdCOEQsRUFBTyxNQUFRalEsRUFBS0UsR0FBS0YsRUFBS0UsR0FBR0YsS0FBSzRELEVBQUdsUCxFQUFTb0wsRUFBVStDLEVBQVFoTyxFQUFNeWEsRUFBWTFNLEtBQVNnQixJQUFNNUQsRUFBS00sS0FBT3NELElBQU0vTyxFQUFLNkMsNEJBQThCLEtBQU9zSSxFQUFLTSxLQUFPLENBQzVMc0QsRUFBR29DLEVBQWVsRyxFQUFVRSxHQUFNLElBQU9BLEVBQUtNLElBQzlDc0MsSUFBSzlDLElBQ08sQ0FDWixJQUFJa04sT0FBTyxJQUFXaUQsRUFBS3JNLEVBQUlxTSxFQUFLck0sRUFBSUEsRUFBR3NNLEVBQWVwUSxFQUMxRCxPQUFPa04sRUFBT0EsSUFBU25ZLEVBQUs2Qyw0QkFBNkIsSUFBT3NJLEVBQUtHLE9BQVM2RixFQUFlbEcsRUFBVUUsR0FBTSxJQUFPQSxFQUFLTSxJQUFNME0sR0FDNUYsS0FBbkNpRCxFQUFPVCxFQUFxQlMsVUFBc0IsSUFBV0EsRUFBS3JOLEtBQU9xTixFQUFLck4sTUFBUTlDLElBQWFvUSxFQUFlRCxFQUFLck4sT0FDdkgsSUFBT3FOLFFBQVEsSUFBV0EsRUFBS3JOLFVBQU8sSUFBV3FOLEVBQUtyTSxNQUFVLElBQU9nTSxFQUFlaE4sRUFBSzlPLEVBQUVnQixPQUFPLEdBQUkrUixFQUFLLENBQ3pHbEIsTUFBTzdNLEVBQU9rVSxFQUFNaE4sRUFBTWtRLEtBQzFCL0IsRUFBYStCLEtBQWtCRCxHQUFPLElBQUssTUFFbkRBLE9BRVIsSUFBV3JOLEVBQUk0SixRQUFVMEIsRUFBVTlZLEVBQVF3TixFQUFJNkcsSUFBTTdHLEVBQUk0SixPQUN6RCxJQUFJMkQsR0FBUyxFQUFJQyxFQUFpQnRjLEVBQUVnQixRQUFPLEVBQUksR0FBSUosRUFBUThJLGdCQUMzRCxJQUFJLElBQU8zSSxFQUFLbUQsaUJBQWMsSUFBV3RELEVBQVFrSixTQUFTc1EsS0FBWSxJQUFPa0IsSUFBaUIsSUFBT2pCLEVBQWEsSUFBSyxJQUFJbGIsRUFBSWliLEVBQVNqYixHQUFLbUMsRUFBUXdOLEVBQUk0SixNQUFRNUosRUFBSTZHLEtBQU14VyxTQUFLLElBQVd5QixFQUFRa0osU0FBUzNLLEtBQU95QixFQUFRa0osU0FBUzNLLFFBQUssU0FDbE95QixFQUFRaUosTUFBTTFLLElBQ3JCLEdBQUlhLEVBQUVxRCxXQUFXdEMsRUFBS3lELGlCQUFrQixJQUFPNlYsSUFBZSxJQUFPa0IsSUFDckVjLEVBQVNYLEVBRDZFVyxFQUFTdGIsRUFBS3lELGNBQWNsQixLQUFLNUMsRUFBSTJYLElBQWErQixFQUFTdEssRUFBRzBMLEVBQVkxTSxHQUFNL04sRUFBTUgsRUFBU2tPLEVBQUtDLEdBQVV1TSxNQUM1SixJQUFPZSxFQUFRLENBQ25ELFFBQUksSUFBVzFMLEdBQWF5SixFQUFVekosR0FDbEMsR0FBSTBMLEVBQVNILEVBQVM5QixFQUFTdEssRUFBR2YsS0FBV0EsSUFBVSxJQUFPc0wsS0FBZ0IsSUFBT2dDLElBQVUsSUFBT2QsRUFBYyxDQUNoSCxJQUFJZ0IsRUFBa0IzYixFQUFROEksZUFBZTBRLEdBQzdDLElBQUttQyxJQUFtQixJQUFPQSxFQUFnQmxTLE1BQU1nQyxRQUFVa1EsRUFBZ0JsUyxNQUFNbUMsTUFBUXNELEdBQUtBLElBQU0vTyxFQUFLNkMsMkJBQ3pHLEdBQUk3QyxFQUFLK0IsaUJBQWMsSUFBV2xDLEVBQVE4SSxlQUFlOFMsRUFBU3BDLEtBQWF0TCxFQUFJNkcsSUFBTXlFLEVBQVMsQ0FDOUYsSUFBSXFDLEdBQU8sRUFDWCxHQUFJN2IsRUFBUW9KLFVBQVVvUSxTQUFZLElBQVd4WixFQUFROEksZUFBZThTLEVBQVNwQyxPQUM3RSxLQUQyRmlDLEVBQVN2VSxFQUFRc1MsRUFBVXhaLEVBQVFvSixVQUFVb1EsR0FBVXRLLEdBQUcsT0FDbkksSUFBT3dMLElBQWtCZSxFQUFPakIsTUFBUWhCLEdBQVVxQyxHQUFPLElBQzNFM04sRUFBSTZHLElBQU15RSxJQUFZeFosRUFBUThJLGVBQWUwUSxRQUFXLElBQVVxQyxJQUFTQyxFQUFPdEMsRUFBU3JaLEVBQUttRCxZQUFhLElBQUssSUFBSXlZLEVBQU92QyxFQUFVLEVBQUd3QyxFQUFRSixFQUFTcEMsR0FBVXVDLEdBQVFDLEVBQU9ELElBQVEsSUFDNUwsS0FEZ01OLEVBQVNILEVBQVNTLEVBQU03TSxFQUFHZixJQUM1TSxDQUNYc04sRUFBU1EsRUFBbUJ6QyxPQUFTLElBQVdpQyxFQUFPdk4sSUFBTXVOLEVBQU92TixJQUFNNk4sSUFBU04sRUFDbkZqQyxFQUFVdUMsRUFDVixhQUdMTixFQUFTLENBQ1pqQixNQUFPb0IsRUFBU3BDLFVBR3JCaUMsR0FBUyxHQUNoQixJQUFPQSxJQUFXdGIsRUFBS21ELGFBQWVLLEdBQVc4VCxNQUFnQixJQUFNK0IsR0FBV3JMLElBQVUsSUFBT3VNLEVBQWdCRSxFQUFZMU0sSUFBUWxPLEVBQVFpSixNQUFNdVEsSUFBWSxFQUFJeFosRUFBUWlKLE1BQU11USxHQUFTbFQsUUFBVW5HLEVBQUttRCxhQUFlNkssSUFBVSxJQUFPdU0sSUFBa0JlLEVBQVNsQyxHQUFVLElBQU9rQyxFQUFTbEMsRUFBVUMsRUFBU3RLLEVBQUdmLEVBQVFzTCxPQUFhLEVBQVF2TCxJQUNuVixJQUFPdU4sSUFBV0EsRUFBUyxDQUN2QnZOLElBQUtzTCxJQUdiLEdBQUlwYSxFQUFFcUQsV0FBV3RDLEVBQUswRCxrQkFBbUIsSUFBTzRWLElBQWUsSUFBT2tCLEVBQWMsQ0FDaEYsSUFBSXVCLEVBQWEvYixFQUFLMEQsZUFBZW5CLEtBQUs1QyxFQUFJMlgsR0FBVSxRQUFLLElBQVd2SixFQUFJNEosTUFBUXBYLEVBQVF3TixFQUFJNkcsSUFBTTdHLEVBQUk0SixNQUFRNUosRUFBS2dCLEVBQUd1TSxFQUFRdGIsRUFBTUgsRUFBU21PLFFBQ2pKLElBQVcrTixJQUFlVCxHQUFTLElBQU9TLEVBQWFULEVBQVNTLEdBS3BFLE9BSEFULFFBQVUsSUFBV0EsRUFBT3ZOLE1BQVF1TixFQUFPdk4sSUFBTXNMLElBQVUsSUFBT2lDLElBQVUsSUFBT2QsR0FBZ0JsSixHQUFhLEdBQ2hIelIsRUFBUThJLGVBQWlCMUosRUFBRWdCLFFBQU8sRUFBSSxHQUFJc2IsSUFBbUJPLE9BQW1CLEVBQVF6QyxHQUFTLEdBQ2pGc0IsRUFBcUJXLEdBR3pDLFNBQVNRLEVBQW1CRSxFQUFhQyxFQUFRQyxHQUM3QyxRQUFJLElBQVdGLEVBQWEsSUFBS0EsRUFBY0MsRUFBUyxFQUFHLEVBQUlELElBQWdCbmMsRUFBUThJLGVBQWVxVCxHQUFjQSxLQUNwSCxJQUFLLElBQUlHLEVBQUtILEVBQWFHLEVBQUtGLEVBQVFFLElBQU0sUUFBSSxJQUFXdGMsRUFBUThJLGVBQWV3VCxLQUFRUixFQUFPUSxHQUFJLEdBQUssQ0FFeEcsR0FEUyxHQUFLQSxFQUFLeEosRUFBUXdKLEdBQU10YyxFQUFROEksZUFBZXdULEVBQUssR0FDckQsQ0FDSixJQUFJclQsRUFBUWtJLEVBQVNtTCxHQUFJakwsUUFDekIsS0FBT3BJLEVBQU1BLEVBQU0zQyxPQUFTLEdBQUdtRCxNQUFNbUMsS0FBTzNDLEVBQU1PLE1BQ2xELElBQWtEK1MsRUFBOUMzSixFQUFZMUIsRUFBc0JvTCxFQUFJclQsR0FDMUMsR0FBSTJKLEtBQWMsSUFBT0EsRUFBVW5KLE1BQU13RCxLQUFPLFdBQWEyRixFQUFVbkosTUFBTWtDLGlCQUFtQjRRLEVBQUt2YyxFQUFROEksZUFBZXdULEVBQUssTUFBTyxJQUFPQyxFQUFHOVMsTUFBTXlKLHVCQUF3Qk4sRUFBWXhULEVBQUVnQixPQUFPLEdBQUl3UyxFQUFXLENBQ2hOM0IsTUFBT0ssRUFBZWdMLEVBQUkxSixFQUFVbkosT0FBTyxJQUFPbUosRUFBVW5KLE1BQU1tQyxPQUN4RG9GLGdCQUFpQixFQUFJa0ssRUFBZW9CLEVBQUkxSixHQUFXLElBQUssSUFBT3lKLEdBQVcsQ0FDcEYsSUFBSUcsRUFBV3hjLEVBQVE4SSxlQUFlc1QsR0FBUW5MLE1BQzlDLE9BQU9qUixFQUFROEksZUFBZXNULFFBQVUsRUFBUWxWLEVBQVFrVixFQUFRSSxHQUFVLEdBQUksTUFLOUYsU0FBU3RCLEVBQWVoTixFQUFLdU8sRUFBV2hELEVBQWErQixHQUNqRCxTQUFTa0IsRUFBaUJ4TyxFQUFLNkQsRUFBUTRILEdBQ25DLElBQUlnRCxFQUFXNUssRUFBTzdELEdBQ3RCLFFBQUksSUFBV3lPLElBQVksSUFBT0EsRUFBU2xULE1BQU1nQyxTQUFVLElBQU9rUixFQUFTbFQsTUFBTWlDLGtCQUFlLElBQVdxRyxFQUFPLFNBQU0sSUFBV0EsRUFBTyxHQUFHTSxZQUFhLE9BQU8sRUFDakssSUFBSWhILEVBQVlzTyxFQUFVN0IsT0FBUzVKLEVBQU0sRUFBSTZELEVBQU83RCxFQUFNLEtBQU0sSUFBTzZELEVBQU83RCxFQUFNLEdBQUd6RSxNQUFNZ0MsUUFBVXNHLEVBQU83RCxFQUFNLEdBQUs2RCxFQUFPN0QsRUFBTSxHQUFJME8sRUFBWWpELEVBQVU1RSxJQUFNN0csRUFBTSxFQUFJNkQsRUFBTzdELEVBQU0sS0FBTSxJQUFPNkQsRUFBTzdELEVBQU0sR0FBR3pFLE1BQU1nQyxRQUFVc0csRUFBTzdELEVBQU0sR0FBSzZELEVBQU83RCxFQUFNLEdBQ3pRLE9BQU83QyxHQUFhdVIsRUFFeEIsSUFBSUMsRUFBUyxFQUFHL0UsT0FBUSxJQUFXNUosRUFBSTRKLE1BQVE1SixFQUFJNEosTUFBUTVKLEVBQUs2RyxPQUFNLElBQVc3RyxFQUFJNkcsSUFBTTdHLEVBQUk2RyxJQUFNN0csRUFDckcsR0FBSUEsRUFBSTRKLE1BQVE1SixFQUFJNkcsTUFBUStDLEVBQVE1SixFQUFJNkcsSUFBS0EsRUFBTTdHLEVBQUk0SixPQUFRMEQsT0FBZSxJQUFXQSxFQUFlQSxFQUFlMUQsRUFDdkhBLElBQVUvQyxHQUFPNVUsRUFBSytCLGlCQUFjLElBQVdsQyxFQUFROEksZUFBZTBTLFNBQWlCLElBQVcvQixRQUFlLElBQVdnRCxFQUFXLENBQ25JLElBQXVHbGUsRUFBbkdtZCxFQUFpQnRjLEVBQUVnQixRQUFPLEVBQUksR0FBSUosRUFBUThJLGdCQUFpQmdVLEVBQU1uTCxPQUFxQixHQUFRLEdBQ2xHLElBQUszUixFQUFRNEYsRUFBSWtTLEVBQU92WixFQUFJdWUsRUFBS2hGLEdBQVN2WixFQUFHQSxXQUFZeUIsRUFBUThJLGVBQWV2SyxRQUNoRixJQUFXa2UsVUFBb0J6YyxFQUFRaUosTUFBTTFLLEVBQUksR0FDakQsSUFBZ0R3ZSxFQUFHQyxFQUEvQzFKLEdBQVEsRUFBSS9FLEVBQUlpTixFQUFjbUIsRUFBV3BPLEVBQzdDLElBQUtrTyxJQUFjemMsRUFBUThJLGVBQWUwUyxHQUFnQnBjLEVBQUVnQixRQUFPLEVBQUksR0FBSXFjLEdBQzNFRSxJQUFZcE8sS0FBTWhRLEVBQUlrZSxFQUFZMUgsRUFBTUEsRUFBTSxFQUFHeFcsR0FBS3VlLEVBQUt2ZSxJQUFLLENBQzVELFFBQUksS0FBWXdlLEVBQUlyQixFQUFlbmQsTUFBTyxJQUFPd2UsRUFBRS9MLGlCQUFtQitELEdBQU94VyxHQUFLdVosR0FBU3ZaLEdBQUttZSxFQUFpQm5lLEVBQUdtZCxFQUFnQixDQUNoSTVELE1BQU9BLEVBQ1AvQyxJQUFLQSxLQUNKLENBQ0QsS0FBTSxLQUFPakMsRUFBUTZKLEdBQVVsVCxNQUFNbUMsS0FBTyxDQUN4QyxJQUFJLEtBQVFvUixFQUFXNUosRUFBMkJ1SixFQUFVSSxFQUFHNWMsS0FBVSxNQUFRNGMsRUFBRXRULE1BQU1tQyxJQUFLLENBQzFGLE1BQVFtUixFQUFFdFQsTUFBTW1DLEtBQU82TCxHQUFVLEdBQ2pDLElBQUlnRSxFQUFTdlUsRUFBUXlWLEVBQVVJLEVBQUU5TCxNQUFPLE1BQVE4TCxFQUFFdFQsTUFBTW1DLElBQUssTUFBUW1SLEVBQUV0VCxNQUFNbUMsS0FDN0UsR0FBSTBILEdBQVEsSUFBT21JLEVBQVFsTixHQUFLa04sRUFBT3ZOLEtBQU95TyxHQUFZLEdBQUlySixHQUFTMEosRUFBVSxXQUM5RTFKLEdBQVEsRUFDZixHQUFJQSxFQUFPLE1BQ1AsSUFBV21KLEdBQWFNLEVBQUV0VCxNQUFNZ0MsUUFBVWxOLElBQU0yUCxFQUFJNEosT0FBUytFLElBQzdELE1BRUosSUFBS3ZKLEdBQVNxSixFQUFXM2MsRUFBUW1KLFdBQVksTUFDN0N3VCxJQUVKLElBQU03SixFQUFRNkosR0FBVWxULE1BQU1tQyxNQUFRMEgsR0FBUSxHQUFLcUosRUFBV3BPLEVBRWxFLElBQUsrRSxFQUFPLE1BRWhCLElBQUtBLEVBQU8sT0FBT3RULEVBQVE4SSxlQUFpQjFKLEVBQUVnQixRQUFPLEVBQUksR0FBSXNiLEdBQWlCakssR0FBYSxJQUMzRixPQUNHZ0wsR0FBYTNKLEVBQVEwSSxHQUFjL1IsTUFBTW1NLEtBQU82RyxFQUFVaFQsTUFBTW1NLEtBQU81VixFQUFROEksZUFBZTBTLEdBQWdCcGMsRUFBRWdCLFFBQU8sRUFBSSxHQUFJcWMsSUFDdEksT0FBT2hMLEdBQWEsR0FBS29MLEVBRTdCLFNBQVNmLEVBQU81TixFQUFLQyxFQUFROE8sR0FDekIsSUFBSTNSLEVBQU9pRyxFQUFnQnJELEdBQUt6RSxNQUNoQyxHQUFJLEtBQU82QixFQUFLTSxNQUFRTixFQUFPd0gsRUFBUTVFLEdBQUt6RSxRQUFRLElBQU82QixFQUFLRyxPQUFRLE9BQU9ILEVBQUtFLEdBQ3BGLElBQUksSUFBT3lSLFFBQVMsSUFBV2pkLEVBQVE4SSxlQUFlb0YsS0FBUSxJQUFPbE8sRUFBUThJLGVBQWVvRixHQUFLOEMsZUFBZ0IsT0FBTyxFQUN4SCxJQUFJLElBQU83QyxJQUFXLEVBQUlELEVBQUssQ0FDM0IsR0FBSStPLEVBQU8sQ0FDUCxJQUFJaFUsRUFBUWtJLEVBQVNqRCxHQUNyQixPQUFPakYsRUFBTTNDLE9BQVMsR0FBSyxLQUFPMkMsRUFBTUEsRUFBTTNDLE9BQVMsR0FBR21ELE1BQU1tQyxJQUFNLEVBQUksR0FFOUUsSUFBSXNSLEVBQWVoTSxFQUFzQmhELEVBQUtpRCxFQUFTakQsSUFBT2lQLEVBQWtCN0wsRUFBZXBELEVBQUtnUCxFQUFhelQsT0FDakgsT0FBT3lULEVBQWF6VCxNQUFNbUMsTUFBUXVSLEVBRXRDLE9BQU8sRUFFWCxTQUFTdkIsRUFBUzFOLEVBQUtrUCxFQUFVSCxRQUM3QixJQUFXQSxJQUFVQSxHQUFRLEdBQzdCLElBQUssSUFBSTdSLEVBQVc4QyxFQUFNLEVBQUcsS0FBTzRFLEVBQVExSCxHQUFVM0IsTUFBTW1DLE9BQVEsSUFBT3dSLEtBQWEsSUFBT3RLLEVBQVExSCxHQUFVM0IsTUFBTWtDLGlCQUFtQm1RLEVBQU8xUSxPQUFVLEdBQVEsTUFBUSxJQUFPZ1MsSUFBYXRCLEVBQU8xUSxPQUFVLEVBQVE2UixLQUFXN1IsSUFDbk8sT0FBT0EsRUFFWCxTQUFTaVMsRUFBYW5QLEVBQUtrUCxHQUN2QixJQUFvQm5VLEVBQWhCbUMsRUFBVzhDLEVBQ2YsR0FBSTlDLEdBQVksRUFBRyxPQUFPLEVBQzFCLEtBQU0sSUFBTUEsS0FBYSxJQUFPZ1MsSUFBWSxJQUFPdEssRUFBUTFILEdBQVUzQixNQUFNa0MsaUJBQWtCLElBQU95UixJQUFhdEIsRUFBTzFRLE9BQVUsR0FBUSxNQUFRbkMsRUFBUWtJLEVBQVMvRixJQUM3SjlFLE9BQVMsR0FBSyxJQUFNMkMsRUFBTTNDLFFBQVUsS0FBTzJDLEVBQU0sR0FBR1EsTUFBTW1DLFFBQ2hFLE9BQU9SLEVBRVgsU0FBU2tTLEVBQVlyTSxFQUFPakksRUFBUXlSLEVBQVU4QyxFQUFPQyxHQUNqRCxHQUFJRCxHQUFTbmUsRUFBRXFELFdBQVd0QyxFQUFLd0MsZUFBZ0IsQ0FDM0MsSUFBSThZLEVBQVN0YixFQUFLd0MsY0FBY0QsS0FBSzhELEVBQVcrVyxFQUFPdlUsRUFBUXlSLEVBQVV0YSxHQUN6RSxHQUFJc2IsRUFBUSxDQUNSLEdBQUlBLEVBQU85RCxrQkFBbUIsQ0FDMUIsSUFBSXlELEVBQVVLLEVBQU85RCxrQkFDckJBLEdBQWtCLElBQU95RCxFQUFVQSxFQUFVQSxFQUFRbkcsTUFBT21HLEVBQVFyRyxJQUFLMEcsRUFBT3pTLFFBQVVBLEdBQzFGQSxFQUFTeU8sR0FBVSxRQUV2QixJQUFXZ0QsSUFBYUEsT0FBVyxJQUFXZ0IsRUFBT2pCLE1BQVFpQixFQUFPakIsTUFBUUMsSUFHcEYsUUFBSSxJQUFXeEosSUFBVUEsRUFBTXpLLFVBQVVpWCxVQUFVelUsRUFBT2xCLEtBQUssVUFBTSxJQUFXMlMsUUFBWSxJQUFXOEMsR0FBUyxTQUFXQSxFQUFNRyxNQUFRbEQsR0FBTXZKLEVBQU93SixPQUFVLE9BQVEsT0FBUSxJQUFXOEMsR0FBUyxZQUFjQSxFQUFNRyxPQUFTSCxFQUFNNU4sVUFBWUEsRUFBUWdPLFFBQVVKLEVBQU01TixVQUFZQSxFQUFRaU8sYUFDL1IsSUFBT0osR0FBZ0IsQ0FDbkIsSUFBSUssRUFBU3plLEVBQUU2UixHQUFRNk0sRUFBUzdNLEVBQU16SyxVQUFVdVgsWUFDaEQ5TixHQUFpQixFQUFJNE4sRUFBT3ZXLFFBQVEsU0FBVTBXLFdBQVcsV0FDckRGLElBQVd0RyxJQUFvQjFQLEtBQUssSUFBTStWLEVBQU92VyxRQUFRLFlBQWEsSUFBTzNELEdBQVdxRixJQUFXNlUsRUFBT3ZXLFFBQVEsYUFDbkgsSUFHWCxTQUFTZ0ssRUFBZXBELEVBQUs1QyxFQUFNMlMsR0FDL0IsUUFBdUMsS0FBbkMzUyxFQUFPQSxHQUFRd0gsRUFBUTVFLEdBQUt6RSxPQUF1QnZJLGNBQWUsSUFBTytjLEVBQVUsT0FBTzdlLEVBQUVxRCxXQUFXNkksRUFBS3BLLGFBQWVvSyxFQUFLcEssWUFBWWYsR0FBUW1MLEVBQUtwSyxZQUM3SixJQUFJLElBQU9vSyxFQUFLRyxPQUFRLE9BQU90TCxFQUFLZSxZQUFZdUwsT0FBT3lCLEVBQU0vTixFQUFLZSxZQUFZb0YsUUFDOUUsSUFBSyxFQUFJNEgsUUFBTyxJQUFXbE8sRUFBUThJLGVBQWVvRixHQUFNLENBQ3BELElBQW9EZ1EsRUFBaERqVixFQUFRa0ksRUFBU2pELEdBQU1pUSxFQUFxQixHQUNoRCxHQUFJbFYsRUFBTTNDLE9BQVMsR0FBSyxLQUFPMkMsRUFBTUEsRUFBTTNDLE9BQVMsR0FBR21ELE1BQU1tQyxJQUFNLEVBQUksR0FBSSxJQUFLLElBQUlyTixFQUFJLEVBQUdBLEVBQUkwSyxFQUFNM0MsT0FBUS9ILElBQUssR0FBSSxLQUFPMEssRUFBTTFLLEdBQUdrTCxNQUFNbUMsTUFBTyxJQUFPM0MsRUFBTTFLLEdBQUdrTCxNQUFNaUMsY0FBZSxJQUFPekMsRUFBTTFLLEdBQUdrTCxNQUFNeUosc0JBQXVCLElBQU9qSyxFQUFNMUssR0FBR2tMLE1BQU1nQyxhQUFVLElBQVd5UyxJQUFZLElBQU9qVixFQUFNMUssR0FBR2tMLE1BQU0rQixHQUFHRixLQUFLNFMsRUFBU3pVLE1BQU1tQyxJQUFLNUwsRUFBU2tPLEdBQUssRUFBSS9OLE1BQVdnZSxFQUFtQmhTLEtBQUtsRCxFQUFNMUssS0FDelksSUFBTzBLLEVBQU0xSyxHQUFHa0wsTUFBTWdDLFNBQVd5UyxFQUFXalYsRUFBTTFLLElBQUssRUFBSTRmLEVBQW1CN1gsUUFBVSxjQUFjZ0YsS0FBSzZTLEVBQW1CLEdBQUcxVSxNQUFNbUMsTUFBTyxPQUFPekwsRUFBS2UsWUFBWXVMLE9BQU95QixFQUFNL04sRUFBS2UsWUFBWW9GLFFBRXhNLE9BQU9nRixFQUFLTSxJQUVoQixTQUFTd1MsRUFBd0IvWSxFQUFLeUIsR0FDbEMsR0FBSXlJLEdBQ0EsR0FBSWxLLEVBQUltQixVQUFVdVgsY0FBZ0JqWCxJQUFVekIsRUFBSW5FLGNBQWdCNEYsR0FBUyxLQUFPekIsRUFBSW5FLGFBQWMsQ0FDOUYsSUFBSThILEVBQVN5TyxJQUFZcEcsUUFBU2dOLEVBQVdoWixFQUFJbUIsVUFBVXVYLFlBQzNELEdBQUlNLElBQWF2WCxFQUFPLENBQ3BCLElBQUlnVyxFQUFNbkwsS0FDVCxJQUFNbUwsR0FBT3VCLElBQWE3RyxJQUFvQjFQLEtBQUssSUFBTWtCLEVBQVMsSUFBTSxJQUFNOFQsR0FBT25NLEdBQWtCM0gsR0FDeEdzVSxFQUFZalksRUFBSzJELFVBR3RCM0QsRUFBSW5FLGNBQWdCNEYsSUFBVXpCLEVBQUluRSxZQUFjNEYsRUFBTyxLQUFPekIsRUFBSW5FLGFBQWVtRSxFQUFJYyxnQkFBZ0IsZ0JBRWhILFNBQVMwUixFQUEwQnlHLEVBQWVDLEdBZTlDLEdBQUlBLElBQVc3ZCxFQUFRNGQsRUFBY3ZKLElBQU11SixFQUFjeEcsTUFBUXdHLEVBQWN4RyxNQUFRd0csRUFBY3ZKLEtBQ3JHdUosRUFBY3hHLFFBQVV3RyxFQUFjdkosSUFBSyxDQUN2QyxPQUFRNVUsRUFBS2dFLHNCQUNYLElBQUssT0FDSCxNQUVGLElBQUssU0FDSG1hLEVBQWdCLENBQ1p4RyxNQUFPLEVBQ1AvQyxJQUFLMEMsSUFBWW5SLFFBRXJCLE1BRUYsSUFBSyxTQUNIZ1ksRUFBY3ZKLElBQU11SixFQUFjeEcsTUFBUThELEVBQVNqSyxLQUNuRCxNQUVGLElBQUssYUFDSCxHQWhDUixTQUFzQjZNLEdBQ2xCLEdBQUksS0FBT3JlLEVBQUtnRCxZQUFjLElBQU1oRCxFQUFLc2UsT0FBUSxDQUM3QyxJQUFJQyxFQUFNMWUsRUFBUThJLGVBQ2xCLFFBQUksSUFBVzRWLEVBQUlGLElBQWFFLEVBQUlGLEdBQVV2TixRQUFVSyxFQUFla04sR0FBVyxDQUM5RSxHQUFJQSxFQUFXNUMsR0FBVSxHQUFJLE9BQU8sRUFDcEMsSUFBSStDLEVBQVd2ZixFQUFFK1UsUUFBUWhVLEVBQUtnRCxXQUFZc1UsS0FDMUMsSUFBSyxJQUFNa0gsRUFBVSxDQUNqQixJQUFLLElBQUlDLEtBQU1GLEVBQUssR0FBSUEsRUFBSUUsSUFBT0QsRUFBV0MsR0FBTUYsRUFBSUUsR0FBSTNOLFFBQVVLLEVBQWVzTixHQUFLLE9BQU8sRUFDakcsT0FBTyxJQUluQixPQUFPLEVBb0JDQyxDQUFhUCxFQUFjeEcsT0FBUSxDQUNuQyxJQUFJNkcsRUFBV2xILElBQVkzUCxLQUFLLElBQUlwQyxRQUFRdkYsRUFBS2dELFlBQ2pEbWIsRUFBY3ZKLElBQU11SixFQUFjeEcsTUFBUTNYLEVBQUtRLGFBQWVpYixFQUFTK0MsR0FBWUEsRUFDbkYsTUFHTixRQUNFLElBQUlHLEVBQWdCUixFQUFjeEcsTUFBT2lILEVBQWtCcE4sRUFBcUJtTixHQUFlLEdBQUtFLEVBQWVwRCxHQUFVLElBQU1tRCxHQUFtQmpELEVBQU8sR0FBS2lELEVBQWtCLEdBQ3BMLEdBQUlELEVBQWdCRSxFQUFjVixFQUFjdkosSUFBTXVKLEVBQWN4RyxNQUFRZ0UsRUFBT2dELEdBQWUsSUFBT2hELEVBQU9nRCxFQUFnQixHQUFHLEdBQU1BLEVBQWdCbEQsRUFBU2tELE9BQXFCLENBQ25MLElBQUloQyxFQUFNOWMsRUFBUThJLGVBQWVpVyxHQUFrQkUsRUFBSzFOLEVBQWdCeU4sRUFBY2xDLEVBQU1BLEVBQUlyVCxNQUFNMkgsYUFBVSxFQUFRMEwsR0FBTTViLEVBQWNvUSxFQUFlME4sRUFBY0MsRUFBR3hWLE9BQzVLLEdBQUksS0FBT3ZJLEdBQWV1VyxJQUFZdUgsS0FBa0I5ZCxJQUFlLElBQU8rZCxFQUFHeFYsTUFBTXlKLHFCQUFzQixJQUFPK0wsRUFBR3hWLE1BQU1rQyxpQkFBbUJtUSxFQUFPa0QsRUFBYzdlLEVBQUttRCxhQUFlMmIsRUFBR3hWLE1BQU1tQyxNQUFRMUssRUFBYSxDQUNuTixJQUFJa2IsRUFBU1IsRUFBU29ELElBQ3JCNUMsR0FBVTBDLEdBQWlCQSxJQUFrQkUsS0FBa0JBLEVBQWU1QyxHQUVuRmtDLEVBQWN2SixJQUFNdUosRUFBY3hHLE1BQVFrSCxHQUdsRCxPQUFPVixHQUdmLElBcVFHWSxFQXJRQ0MsRUFBYSxDQUNiQyxHQUFJLFNBQVluTyxFQUFPb08sRUFBV0MsR0FDOUIsSUFBSUMsRUFBSyxTQUFZQyxHQUNqQkEsRUFBRUMsZ0JBQWtCRCxFQUFJQSxFQUFFQyxlQUFpQkQsRUFBRzVHLFVBQVUsR0FBSzRHLEdBQzdELElBQWlCOUcsRUFBYjVULEVBQU9qRixLQUNYLFFBQUksSUFBV2lGLEVBQUswQixXQUFhLFNBQVczRyxLQUFLb0YsU0FBVSxDQUN2RCxJQUFJeWEsRUFBU3RnQixFQUFFc0gsS0FBSzVCLEVBQU0sbUJBQzFCNGEsRUFBUyxJQUFJamdCLFVBQVVpZ0IsR0FBUTNlLEtBQUsrRCxHQUFRcWEsRUFBV1EsSUFBSTdhLE9BQ3hELENBQ0gsR0FBSSxhQUFlMGEsRUFBRTlCLE1BQVEsU0FBVzdkLEtBQUtvRixZQUFjSCxFQUFLOGEsVUFBWTlhLEVBQUsrYSxZQUFjLFlBQWNMLEVBQUU5QixNQUFROEIsRUFBRU0sU0FBVyxLQUFPTixFQUFFN1AsVUFBVyxJQUFPeFAsRUFBS3FELFlBQWNnYyxFQUFFN1AsVUFBWUEsRUFBUW9RLE1BQU8sQ0FDM00sT0FBUVAsRUFBRTlCLE1BQ1IsSUFBSyxRQUNILElBQUksSUFBT3pOLEdBQWtCdVAsRUFBRVEsV0FBYSwwQkFBNEJSLEVBQUVRLFVBQVcsT0FBTy9QLEdBQWlCLEVBQzdHdVAsRUFBRVMsaUJBQ0YsTUFFRixJQUFLLFVBQ0hqUSxHQUFvQixFQUFJQyxHQUFpQixFQUN6QyxNQUVGLElBQUssV0FDSCxJQUFJLElBQU9ELEVBQW1CLE9BQU93UCxFQUFFUyxpQkFDdkNqUSxHQUFvQixFQUNwQixNQUVGLElBQUssUUFDTCxJQUFLLFFBQ0gsT0FBT0UsR0FBbUJBLEdBQWtCLEVBQUllLEVBQU1pUCxPQUFROUIsRUFBd0JuTixHQUFRdlEsRUFBUThXLElBQW9CbkcsUUFBUXpJLFVBQVk0TyxLQUFxQjFQLEtBQUssS0FDeEtrVyxXQUFXLFdBQ1AvTSxFQUFNa1AsU0FDUCxPQUFTekgsRUFBT0UsVUFBV29GLFdBQVcsV0FDckMvTSxFQUFNekssV0FBYThZLEVBQWF6RyxNQUFNL1QsRUFBTTRULElBQzdDLEtBQUssRUFFWixJQUFJMEgsRUFBWWQsRUFBYXpHLE1BQU0vVCxFQUFNOFQsV0FDekMsT0FBTyxJQUFPd0gsSUFBY1osRUFBRVMsaUJBQWtCVCxFQUFFYSxtQkFBb0JELEVBRTFFWixFQUFFUyxtQkFHVmhQLEVBQU16SyxVQUFVekcsT0FBT3NmLEdBQWFwTyxFQUFNekssVUFBVXpHLE9BQU9zZixJQUFjLEdBQUlwTyxFQUFNekssVUFBVXpHLE9BQU9zZixHQUFXbFQsS0FBS29ULElBQ25ILElBQU1uZ0IsRUFBRStVLFFBQVFrTCxFQUFXLENBQUUsU0FBVSxVQUFhLE9BQVNwTyxFQUFNcVAsTUFBUWxoQixFQUFFNlIsRUFBTXFQLE1BQU1sQixHQUFHQyxFQUFXRSxHQUFNbmdCLEVBQUU2UixHQUFPbU8sR0FBR0MsRUFBV0UsSUFFeklJLElBQUssU0FBYTFPLEVBQU9zTSxHQUNyQixJQUFJeGQsRUFDSmtSLEVBQU16SyxXQUFheUssRUFBTXpLLFVBQVV6RyxTQUFXd2QsR0FBU3hkLEVBQVMsSUFBV3dkLEdBQVN0TSxFQUFNekssVUFBVXpHLE9BQU93ZCxHQUFVeGQsRUFBU2tSLEVBQU16SyxVQUFVekcsT0FDOUlYLEVBQUU4RixLQUFLbkYsRUFBUSxTQUFTc2YsRUFBV2tCLEdBQy9CLEtBQU0sRUFBSUEsRUFBTWphLFFBQVUsQ0FDdEIsSUFBSWlaLEVBQUtnQixFQUFNL1csT0FDZCxJQUFNcEssRUFBRStVLFFBQVFrTCxFQUFXLENBQUUsU0FBVSxVQUFhLE9BQVNwTyxFQUFNcVAsTUFBUWxoQixFQUFFNlIsRUFBTXFQLE1BQU1YLElBQUlOLEVBQVdFLEdBQU1uZ0IsRUFBRTZSLEdBQU8wTyxJQUFJTixFQUFXRSxVQUVwSXRPLEVBQU16SyxVQUFVekcsT0FBT3NmLFFBR3ZDbEgsRUFBZ0IsQ0FDZnFJLGFBQWMsU0FBc0JoQixHQUNoQyxJQUFJdk8sRUFBUXBSLEtBQU1nZSxFQUFTemUsRUFBRTZSLEdBQVF6QyxFQUFJZ1IsRUFBRTdQLFFBQVN6QixFQUFNc00sR0FBTXZKLEdBQVF3UCxFQUFXdGdCLEVBQUtrQyxVQUFVSyxLQUFLN0MsS0FBTTJmLEVBQUcvSCxJQUFhdkosRUFBSy9OLEdBQ2xJLFFBQUksSUFBV3NnQixFQUFVLE9BQU9BLEVBQ2hDLEdBQUlqUyxJQUFNbUIsRUFBUWlPLFdBQWFwUCxJQUFNbUIsRUFBUWdPLFFBQVVqTyxHQUFVbEIsSUFBTW1CLEVBQVErUSxrQkFBb0JsQixFQUFFTSxTQUFXdFIsSUFBTW1CLEVBQVFnUixLQUFPLFVBQVcxUCxHQUFRdU8sRUFBRVMsaUJBQzFKVyxHQUFhM1AsRUFBT3pDLEVBQUdOLEdBQU1vUCxFQUFZck0sRUFBT3dHLEdBQVUsR0FBS3pYLEVBQVE0RixFQUFHNFosRUFBR3ZPLEVBQU16SyxVQUFVdVgsY0FBZ0J0RyxJQUFZM1AsS0FBSyxVQUFXLEdBQUkwRyxJQUFNbUIsRUFBUWtSLEtBQU9yUyxJQUFNbUIsRUFBUW1SLFVBQVcsQ0FDdkx0QixFQUFFUyxpQkFDRixJQUFJeEYsRUFBV21CLEVBQVNqSyxLQUN4QjZJLEdBQU12SixFQUFPdU8sRUFBRXVCLFNBQVc3UyxFQUFJNEosTUFBUTJDLEVBQVVBLEdBQVUsUUFDdkRqTSxJQUFNbUIsRUFBUXFSLE9BQVN4QixFQUFFdUIsVUFBWXZTLElBQU1tQixFQUFRc1IsU0FBV3pCLEVBQUVTLGlCQUN2RXpGLEdBQU12SixFQUFPLEVBQUd1TyxFQUFFdUIsU0FBVzdTLEVBQUk0SixNQUFRLEdBQUcsS0FBUTNYLEVBQUsrQyxjQUFnQnNMLElBQU1tQixFQUFRdVIsUUFBVSxLQUFPMVMsR0FBS2dSLEVBQUVNLFdBQVksSUFBT04sRUFBRTJCLFFBQVVDLEdBQVNuUSxHQUFPLEdBQUksRUFBSXBCLEVBQVVsSCxNQUFNLEtBQ3RMa1YsRUFBT3ZXLFFBQVEsV0FBWSxJQUFPbkgsRUFBS3FELFlBQWNnTCxJQUFNbUIsRUFBUW9RLE1BQU8sSUFBT1AsRUFBRXVCLFdBQVksSUFBT2pPLEVBQVE1RSxFQUFJNEosT0FBT3JPLE1BQU1nQyxTQUFXeUMsRUFBSTRKLE1BQVE4RCxFQUFTMU4sRUFBSTRKLFFBQ25LNUosRUFBSTZHLElBQU1zSSxFQUFhblAsRUFBSTRKLE9BQU8sR0FBSzVKLEVBQUk0SixNQUFRdUYsRUFBYW5QLEVBQUk2RyxLQUFLLEtBQVE3RyxFQUFJNEosTUFBUThELEVBQVMxTixFQUFJNEosT0FBTyxHQUNqSDVKLEVBQUk2RyxJQUFNNkcsRUFBUzFOLEVBQUk0SixPQUFPLEdBQUs1SixFQUFJNkcsSUFBTS9VLEVBQVFtSixZQUFjK0UsRUFBSTZHLE9BQVE3RyxFQUFJNEosTUFBUTlYLEVBQVFtSixhQUFlcVcsRUFBRVMsaUJBQ3BIekYsR0FBTXZKLEVBQU8vQyxFQUFJNEosTUFBTzVKLEVBQUk2RyxPQUFTeUssRUFBRXVCLFVBQVk1Z0IsRUFBS2dDLG1CQUFvQixJQUFPaEMsRUFBSytCLGFBQWVzTSxJQUFNbUIsRUFBUTBSLE1BQVFyRCxXQUFXLFdBQ3BJLElBQUl2RCxFQUFXRCxHQUFNdkosR0FDckJ1SixHQUFNdkosRUFBT3dKLEVBQVMzQyxRQUN2QixHQUFLdEosSUFBTW1CLEVBQVEyUixNQUFRdEQsV0FBVyxXQUNyQyxJQUFJdUQsRUFBaUJDLEdBQWtCdlEsRUFBTXpLLFVBQVVpVSxTQUFTM0MsT0FBdUIwSixHQUFrQnZRLEVBQU16SyxVQUFVaVUsU0FBUzFGLEtBQ2xJeUYsR0FBTXZKLEVBQU92USxFQUFRNmdCLEdBQWtCQSxJQUFtQnZoQixFQUFRbUosV0FBYSxFQUFJLEdBQUtvWSxHQUFrQixJQUFNQSxFQUFpQixFQUFJLEtBQ3RJLElBQ0hwUixHQUFhLElBQU0vUSxFQUFFK1UsUUFBUTNGLEVBQUdyTyxFQUFLdUQsYUFFekMwVSxjQUFlLFNBQXVCb0gsRUFBR2lDLEVBQVVDLEVBQVV2VCxFQUFRaEosR0FDakUsSUFBSThMLEVBQVFwUixLQUFNZ2UsRUFBU3plLEVBQUU2UixHQUFRekMsRUFBSWdSLEVBQUV2SCxPQUFTdUgsRUFBRW1DLFVBQVluQyxFQUFFN1AsUUFDcEUsTUFBTSxJQUFPOFIsR0FBWWpDLEVBQUVNLFNBQVdOLEVBQUUyQixVQUFZM0IsRUFBRU0sU0FBV04sRUFBRW9DLFNBQVd6UixHQUFZLE9BQU8zQixJQUFNbUIsRUFBUWtTLE9BQVNoUyxJQUFjNEgsSUFBWTNQLEtBQUssTUFBUStILEVBQVk0SCxJQUFZM1AsS0FBSyxJQUM1TGtXLFdBQVcsV0FDUEgsRUFBT3ZXLFFBQVEsV0FDaEIsSUFBSzJJLEdBQWlCLEdBQUksRUFDN0IsR0FBSXpCLEVBQUcsQ0FDSCxLQUFPQSxHQUFLLEtBQU9BLEdBQUssSUFBTWdSLEVBQUVzQyxVQUFZLEtBQU8zaEIsRUFBS2dELGFBQWVxTCxFQUFJck8sRUFBS2dELFdBQVcrUixXQUFXLElBQ3RHLElBR2tCbUQsRUFIZG5LLEVBQU11VCxFQUFXLENBQ2pCM0osTUFBTzNTLEVBQ1A0UCxJQUFLNVAsR0FDTHFWLEdBQU12SixHQUF5Qi9CLEVBQUlpRyxPQUFPQyxhQUFhNUcsR0FDM0R4TyxFQUFRK2hCLGdCQUFpQixFQUN6QixJQUFJN0osRUFBWWhSLEVBQVFnSCxFQUFLZ0IsRUFBR2YsR0FDaEMsSUFBSSxJQUFPK0osSUFBY3pHLEdBQWEsR0FBSzRHLE9BQWtCLElBQVdILEVBQVVzQyxNQUFRdEMsRUFBVXNDLE1BQVFvQixFQUFTMUQsRUFBVWhLLElBQUk0SixNQUFRSSxFQUFVaEssSUFBSTRKLE1BQVFJLEVBQVVoSyxLQUMzS2xPLEVBQVE0RixFQUFJeVMsR0FBa0JBLEVBQWtCbFksRUFBS1EsbUJBQWdCLElBQVd1WCxFQUFVc0MsTUFBUTZDLEVBQWFoRixHQUFtQkEsR0FDbEksSUFBT3FKLElBQWExRCxXQUFXLFdBQzNCN2QsRUFBSzRDLGdCQUFnQkwsS0FBS3VPLEVBQU96QyxFQUFHMEosSUFDckMsR0FBSWxZLEVBQVEraEIsaUJBQWtCLElBQU83SixHQUFZLENBQ2hELElBQUlsUCxFQUFTeU8sSUFDYjZGLEVBQVlyTSxFQUFPakksRUFBUXFQLEVBQWlCbUgsR0FBRyxJQUFPaUMsR0FFMUQsR0FBSWpDLEVBQUVTLGlCQUFrQndCLEVBQVUsT0FBTyxJQUFPdkosSUFBY0EsRUFBVUcsZ0JBQWtCQSxHQUMxRkgsSUFHUjhKLFdBQVksU0FBb0J4QyxHQUM1QixJQUFxRnlDLEVBQW5FQyxFQUFhcmlCLEtBQUsyRyxVQUFVdVgsV0FBVSxHQUFLdEQsRUFBV0QsR0FBTTNhLE1BQzlFYSxJQUFVdWhCLEVBQVl4SCxFQUFTMUYsSUFBSzBGLEVBQVMxRixJQUFNMEYsRUFBUzNDLE1BQU8yQyxFQUFTM0MsTUFBUW1LLEdBQ3BGLElBQUlFLEVBQW1CRCxFQUFXRSxPQUFPLEVBQUczSCxFQUFTM0MsT0FBUXVLLEVBQWtCSCxFQUFXRSxPQUFPM0gsRUFBUzFGLElBQUttTixFQUFXNWIsUUFDMUgsR0FBSTZiLElBQXFCemhCLEVBQVE4VyxJQUFvQm5HLFFBQVF6SSxVQUFZNE8sS0FBcUJuRyxNQUFNLEVBQUdvSixFQUFTM0MsT0FBT2hRLEtBQUssTUFBUXFhLEVBQW1CLElBQ3ZKRSxJQUFvQjNoQixFQUFROFcsSUFBb0JuRyxRQUFRekksVUFBWTRPLEtBQXFCbkcsTUFBTW9KLEVBQVMxRixLQUFLak4sS0FBSyxNQUFRdWEsRUFBa0IsSUFDNUk3akIsRUFBTzhqQixlQUFpQjlqQixFQUFPOGpCLGNBQWNDLFFBQVNMLEVBQWFDLEVBQW1CM2pCLEVBQU84akIsY0FBY0MsUUFBUSxRQUFVRixNQUFzQixDQUMvSSxJQUFLN0MsRUFBRThDLGdCQUFrQjlDLEVBQUU4QyxjQUFjQyxRQUFTLE9BQU8sRUFDekRMLEVBQWFDLEVBQW1CM0MsRUFBRThDLGNBQWNDLFFBQVEsY0FBZ0JGLEVBRTVFLElBQUlHLEVBQWFOLEVBQ2pCLEdBQUk5aUIsRUFBRXFELFdBQVd0QyxFQUFLb0MsZUFBZ0IsQ0FDbEMsSUFBdUUsS0FBbkVpZ0IsRUFBYXJpQixFQUFLb0MsY0FBY0csS0FBSzhELEVBQVcwYixFQUFZL2hCLElBQTBCLE9BQU9xZixFQUFFUyxpQkFDbkd1QyxFQUFhQSxHQUFjTixFQUUvQixPQUFPZCxHQUFTdmhCLE1BQU0sR0FBSSxFQUFJMmlCLEVBQVdsUSxXQUFXM0osTUFBTSxLQUFNMlUsRUFBWXpkLEtBQU00WCxJQUFhbUUsRUFBU2pLLEtBQXlCNk4sRUFBRzNQLElBQWM0SCxJQUFZM1AsS0FBSyxLQUNuSzBYLEVBQUVTLGtCQUVOd0MsbUJBQW9CLFNBQTRCakQsR0E4QzVDLElBQUl2TyxFQUFRcFIsS0FBTXFpQixFQUFhalIsRUFBTXpLLFVBQVV1WCxXQUFVLEdBQUsvVSxHQUFVdEksRUFBUStXLElBQVlwRyxRQUFRekksVUFBWTZPLEtBQWEzUCxLQUFLLElBQUsyUyxFQUFXRCxHQUFNdkosT0FBTyxPQUFRLEdBQVEsR0FDL0ssR0FBSWpJLElBQVdrWixFQUFZLENBRXZCLElBQUlRLEVBdENSLFNBQXdCUixFQUFZbFosRUFBUXlSLEdBQ3hDLElBQUssSUFBd2FrSSxFQUFJcGtCLEVBQXlDMkMsRUFBamQwaEIsRUFBWVYsRUFBV0UsT0FBTyxFQUFHM0gsRUFBUzNDLE9BQU9uUCxNQUFNLElBQUtrYSxFQUFXWCxFQUFXRSxPQUFPM0gsRUFBUzNDLE9BQU9uUCxNQUFNLElBQUttYSxFQUFrQjlaLEVBQU9vWixPQUFPLEVBQUczSCxFQUFTM0MsT0FBT25QLE1BQU0sSUFBS29hLEVBQWlCL1osRUFBT29aLE9BQU8zSCxFQUFTM0MsT0FBT25QLE1BQU0sSUFBS3FhLEVBQU1KLEVBQVV0YyxRQUFVd2MsRUFBZ0J4YyxPQUFTc2MsRUFBVXRjLE9BQVN3YyxFQUFnQnhjLE9BQVEyYyxFQUFNSixFQUFTdmMsUUFBVXljLEVBQWV6YyxPQUFTdWMsRUFBU3ZjLE9BQVN5YyxFQUFlemMsT0FBZUssRUFBUyxHQUFJRCxFQUFPLEdBQStCa2MsRUFBVXRjLE9BQVMwYyxHQUFPSixFQUFVelcsS0FBSyxLQUNoaEIsS0FBTTJXLEVBQWdCeGMsT0FBUzBjLEdBQU9GLEVBQWdCM1csS0FBSyxLQUMzRCxLQUFNMFcsRUFBU3ZjLE9BQVMyYyxHQUFPSixFQUFTSyxRQUFRLEtBQ2hELEtBQU1ILEVBQWV6YyxPQUFTMmMsR0FBT0YsRUFBZUcsUUFBUSxLQUM1RCxJQUFJQyxFQUFZUCxFQUFVN0wsT0FBTzhMLEdBQVdPLEVBQVlOLEVBQWdCL0wsT0FBT2dNLEdBQy9FLElBQUt4a0IsRUFBSSxFQUFHb2tCLEVBQUtRLEVBQVU3YyxPQUFRL0gsRUFBSW9rQixFQUFJcGtCLElBQUssT0FBUTJDLEVBQWNvUSxFQUFla1EsR0FBa0JqakIsSUFDdkdvSSxHQUNFLElBQUssYUFDSHljLEVBQVU3a0IsRUFBSSxLQUFPNGtCLEVBQVU1a0IsSUFBTWtjLEVBQVMzQyxPQUFTcUwsRUFBVTdjLE9BQVMsR0FBS0ksRUFBS3lGLEtBQUtnWCxFQUFVNWtCLElBQ25HQSxFQUFJb2tCLEVBQ0osTUFFRixJQUFLLHdCQUlMLElBQUssd0JBQ0gsTUFBUVEsRUFBVTVrQixHQUFLa2MsRUFBUzFGLE1BQVF4VyxFQUFJb2tCLEVBQzVDLE1BRUYsUUFDRVEsRUFBVTVrQixLQUFPNmtCLEVBQVU3a0IsS0FBTyxNQUFRNGtCLEVBQVU1a0IsRUFBSSxJQUFNNGtCLEVBQVU1a0IsRUFBSSxLQUFPMkMsUUFBZSxJQUFXaWlCLEVBQVU1a0IsRUFBSSxLQUFPNmtCLEVBQVU3a0IsS0FBTzJDLEdBQWUsTUFBUWtpQixFQUFVN2tCLEVBQUksS0FBTyxNQUFRNmtCLEVBQVU3a0IsR0FBSyxNQUFRNmtCLEVBQVU3a0IsRUFBSSxJQUFNNmtCLEVBQVU3a0IsS0FBTzRrQixFQUFVNWtCLEVBQUksSUFBTW9JLEVBQVMsYUFDaFNELEVBQUt5RixLQUFLZ1gsRUFBVTVrQixJQUFLa2MsRUFBUzNDLFFBQVMyQyxFQUFTMUYsT0FBU29PLEVBQVU1a0IsS0FBTzJDLEdBQWUsTUFBUWlpQixFQUFVNWtCLEtBQU8sTUFBUTRrQixFQUFVNWtCLEVBQUksSUFBTTZrQixFQUFVN2tCLEtBQU80a0IsRUFBVTVrQixJQUFNNmtCLEVBQVU3a0IsRUFBSSxLQUFPNGtCLEVBQVU1a0IsRUFBSSxLQUFPb0ksRUFBUyx3QkFDdE9ELEVBQUt5RixLQUFLZ1gsRUFBVTVrQixJQUFLa2MsRUFBUzNDLFNBQVcsTUFBUXFMLEVBQVU1a0IsSUFBTW9JLEVBQVMseUJBQzdFbVYsRUFBTzBGLEdBQWtCampCLElBQUksSUFBTzZrQixFQUFVN2tCLEtBQU80QixFQUFLZ0QsWUFBY3NYLEVBQVMxRixPQUFTeFcsRUFBSW9rQixHQUFNaGMsRUFBUyxhQUM5R0QsRUFBS3lGLEtBQUtnWCxFQUFVNWtCLElBQUtrYyxFQUFTM0MsUUFBUzJDLEVBQVMxRixRQUd4RCxNQUFPLENBQ0hwTyxPQUFRQSxFQUNSRCxLQUFNQSxFQUNOOFQsTUFBT0MsR0FNRzRJLENBRGRuQixFQS9DSixTQUF5QmpSLEVBQU9pUixFQUFZekgsR0FDeEMsR0FBSWhMLEVBQVUsQ0FDVixJQUFJNlQsRUFBWXBCLEVBQVdwYyxRQUFRMlIsSUFBWTNQLEtBQUssSUFBSyxJQUN6RCxHQUFJLElBQU13YixFQUFVaGQsT0FBUSxDQUN4QixJQUFJaWQsRUFBS3JCLEVBQVd2WixNQUFNLElBQzFCNGEsRUFBR2hZLE9BQU9rUCxFQUFTM0MsTUFBTyxFQUFHd0wsR0FBWXBCLEVBQWFxQixFQUFHemIsS0FBSyxLQUd0RSxPQUFPb2EsRUF1Q01zQixDQUFnQnZTLEVBQU9pUixFQUFZekgsR0FDUHpSLEVBQVF5UixHQUNqRCxRQUFTeEosRUFBTXpLLFVBQVVpZCxZQUFjcGtCLEdBQVVxa0IsZ0JBQWtCelMsR0FBU0EsRUFBTWtQLFFBQ2xGN0MsRUFBWXJNLEVBQU93RyxLQUFjK0MsR0FBTXZKLEVBQU93SixFQUFTM0MsTUFBTzJDLEVBQVMxRixLQUFLLEdBQzVFMk4sRUFBUS9iLFFBQ04sSUFBSyxhQUNMLElBQUssd0JBQ0h2SCxFQUFFOEYsS0FBS3dkLEVBQVFoYyxLQUFNLFNBQVN2QixFQUFLd2UsR0FDL0IsSUFBSTVMLEVBQVcsSUFBSTNZLEVBQUU0WSxNQUFNLFlBQzNCRCxFQUFTRSxNQUFRMEwsRUFBTXpPLFdBQVcsR0FBSS9FLEdBQVksRUFBSWdJLEVBQWNDLGNBQWMxVixLQUFLdU8sRUFBTzhHLEtBQzlGaUcsV0FBVyxXQUNYbE8sRUFBSXhJLFFBQVEsVUFDYixHQUNILE1BRUYsSUFBSyx3QkFDSCxJQUFJc2MsRUFBVSxJQUFJeGtCLEVBQUU0WSxNQUFNLFdBQzFCNEwsRUFBUWpVLFFBQVVBLEVBQVFpTyxVQUFXekYsRUFBY3FJLGFBQWE5ZCxLQUFLdU8sRUFBTzJTLEdBQzVFLE1BRUYsUUFDRUMsR0FBZ0I1UyxFQUFPaVIsR0FHM0IxQyxFQUFFUyxtQkFHVjZELG9CQUFxQixTQUE2QnRFLEdBQzlDMVAsRUFBSXhJLFFBQVEsVUFFaEJ5YyxjQUFlLFNBQXVCdkUsRUFBR3dFLEVBQVlDLEdBQ2pELElBQWtCbmQsRUFBUTBZLEdBQUtBLEVBQUUwRSxPQUFTMUUsRUFBRTBFLE9BQU8sR0FBS0YsT0FDeEQsSUFBV2xkLElBQVVBLEVBQVFqSCxLQUFLMkcsVUFBVXVYLFdBQVUsSUFBTThGLEdBQWdCaGtCLEtBQU1pSCxJQUNqRjBZLEVBQUUwRSxhQUFVLElBQVcxRSxFQUFFMEUsT0FBTyxTQUFNLElBQVdELElBQWV6SixHQUFNM2EsS0FBTTJmLEVBQUUwRSxPQUFTMUUsRUFBRTBFLE9BQU8sR0FBS0QsSUFFMUdFLFdBQVksU0FBb0IzRSxHQUM1QixJQUFrQm5CLEVBQVd4ZSxLQUFLMkcsVUFBVXVYLFlBQzVDNWQsRUFBSzBDLGlCQUFtQndiLElBQWE1RyxJQUFZM1AsS0FBSyxLQUFPd1YsRUFBWXpkLEtBQU00WCxJQUFhbUUsRUFBU2pLLE9BQ3JHLElBQU94UixFQUFLb0QscUJBQXNCLElBQU82TSxHQUFjek0sR0FBVzhULE9BQWlCLElBQU05RixLQUEwQndHLEVBQWNpTSxXQUFXdkwsTUFBTWhaLEtBQU0sQ0FBRTJmLEdBQUcsSUFDN0ozUCxFQUFZNEgsSUFBWTNQLEtBQUssS0FFakN1YyxhQUFjLFNBQXNCN0UsR0FDaEN0UCxHQUFrQixHQUV0Qm9VLGdCQUFpQixXQUVibFUsR0FBYSxFQUFJalEsRUFBSzhCLHVCQUF5QnBDLEtBQUsyRyxVQUFVaWQsWUFBY3BrQixHQUFVcWtCLGdCQUFrQjdqQixNQUFRdWUsRUFBd0J2ZSxLQUFNd1EsSUFFbEorVCxXQUFZLFNBQW9CNUUsRUFBR2pCLEdBRS9CLElBQUsxZSxLQUFLMkcsVUFBVWlkLFlBQWNwa0IsR0FBVXFrQixnQkFBa0I3akIsS0FBTSxDQUNoRSxJQUFJMGtCLEVBQW1CMU0sRUFBMEIyQyxHQUFNM2EsTUFBTzBlLFFBQzlELElBQVdnRyxHQUFvQi9KLEdBQU0zYSxLQUFNMGtCLEtBR25EQyxTQUFVLFNBQWtCaEYsR0FDeEIsSUFBa0J0UixFQUFNc00sR0FBTTNhLE1BQU95aUIsRUFBZ0I5akIsRUFBTzhqQixlQUFpQjlDLEVBQUU4QyxjQUFlbUMsRUFBVy9qQixFQUFRK1csSUFBWXBHLE1BQU1uRCxFQUFJNkcsSUFBSzdHLEVBQUk0SixPQUFTTCxJQUFZcEcsTUFBTW5ELEVBQUk0SixNQUFPNUosRUFBSTZHLEtBQzFMdU4sRUFBY29DLFFBQVEsT0FBUWhrQixFQUFRK2pCLEVBQVM3YixVQUFVZCxLQUFLLElBQU0yYyxFQUFTM2MsS0FBSyxLQUNsRnpJLEVBQVNzbEIsYUFBZXRsQixFQUFTc2xCLFlBQVksUUFBUy9ELEdBQWEvZ0IsS0FBTThQLEVBQVFnTyxPQUFRelAsR0FDekZvUCxFQUFZemQsS0FBTTRYLElBQWF6WCxFQUFRNEYsRUFBRzRaLEVBQUczUCxJQUFjNEgsSUFBWTNQLEtBQUssTUFFaEY4YyxVQUFXLFNBQW1CcEYsR0FDMUIsSUFBSTNCLEVBQVN6ZSxFQUFFUyxNQUNmLEdBQUlBLEtBQUsyRyxVQUFXLENBQ2hCNFgsRUFBd0J2ZSxLQUFNd1EsR0FDOUIsSUFBSWdPLEVBQVd4ZSxLQUFLMkcsVUFBVXVYLFlBQWEvVSxFQUFTeU8sSUFBWXBHLFFBQ2hFLEtBQU9nTixJQUFhbGUsRUFBSzhCLHdCQUEwQixJQUFNMFAsS0FBMEIwTSxJQUFhN0csSUFBb0IxUCxLQUFLLElBQU1rQixFQUFTLEdBQUsySCxHQUFrQjNILEtBQy9KLElBQU9yRixHQUFXcUYsS0FBWWdWLFdBQVcsV0FDckNILEVBQU92VyxRQUFRLGVBQ2hCLEdBQUluSCxFQUFLaUMsa0JBQW9CcVAsSUFBZ0J6SSxFQUFTN0ksRUFBSzhCLHFCQUF1QixHQUFLdVYsSUFBb0JuRyxVQUM5R2lNLEVBQVl6ZCxLQUFNbUosT0FBUSxFQUFRd1csSUFBSzNQLElBQWM0SCxJQUFZM1AsS0FBSyxNQUFRK0gsRUFBWTRILElBQVkzUCxLQUFLLElBQzNHK1YsRUFBT3ZXLFFBQVEsYUFHdkJ1ZCxnQkFBaUIsV0FFYnpVLEdBQWEsR0FBS3ZRLEtBQUsyRyxVQUFVaWQsWUFBY3BrQixHQUFVcWtCLGdCQUFrQjdqQixPQUFTLE1BQVF3USxHQUF1QnhRLEtBQUtxQixjQUFnQm1QLElBQXdCQSxFQUFzQnhRLEtBQUtxQixhQUMzTGYsRUFBSzJDLGlCQUFtQnNiLEVBQXdCdmUsTUFBT2EsRUFBUThXLElBQW9CbkcsUUFBUXpJLFVBQVk0TyxLQUFxQjFQLEtBQUssT0FFcklnZCxZQUFhLFdBQ1RqVixJQUFjNEgsSUFBWTNQLEtBQUssS0FBT2dJLEVBQUl4SSxRQUFRLFVBQVduSCxFQUFLOEIsdUJBQXlCLElBQU0wUCxLQUEwQjdSLEVBQUcwRyxVQUFVdVgsV0FBYWplLEVBQUcwRyxVQUFVdVgsY0FBZ0J2RyxJQUFvQjFQLEtBQUssS0FBT2hJLEVBQUcwRyxVQUFVaVgsVUFBVSxJQUN6T3RkLEVBQUtpQyxrQkFBbUIsSUFBT3VCLEdBQVc4VCxNQUFnQjNYLEVBQUcwRyxVQUFVaVgsVUFBVSxJQUNqRnRkLEVBQUs2QixxQkFBdUJsQyxFQUFHMEcsVUFBVWlYLFVBQVUzZCxFQUFHMEcsVUFBVUssaUJBQWlCLEdBQ2pGbVgsV0FBVyxXQUNQVixFQUFZeGQsRUFBSTJYLE1BQ2pCLEtBRVBzTixXQUFZLFdBQ1JqbEIsRUFBRzBHLFVBQVV2RyxjQUFlLEVBQUkrZCxXQUFXLFdBQ3ZDNkYsR0FBZ0IvakIsRUFBSUEsRUFBRzBHLFVBQVV1WCxXQUFVLEtBQzVDLEtBR1gsU0FBU3FELEdBQVNuUSxFQUFPeVEsRUFBVXZULEVBQVE2VyxFQUFPQyxHQUM5QyxJQUFJemUsRUFBWTNHLE1BQVFvUixFQUFNekssVUFBVzBiLEVBQWE4QyxFQUFNM1QsUUFBUzZULEVBQVksR0FBSUMsR0FBYyxFQUFHMUosT0FBUyxFQVkvR2hLLElBQWdCelIsRUFBUWlKLE1BQVEsR0FBSWtjLEVBQWFobEIsRUFBS2dELFdBQWEwVSxFQUEwQixDQUN6RkMsTUFBTyxFQUNQL0MsSUFBSyxJQUNOK0MsTUFBUSxFQUFHOVgsRUFBUTRGLEVBQUl1ZixFQUFZM2UsRUFBVWlVLFNBQVcsQ0FDdkQzQyxNQUFPcU4sR0FFWCxJQUFJQyxFQUFnQixHQUFJQyxFQUFlN2UsRUFBVWlVLFNBQ2pELEdBQUlyYixFQUFFOEYsS0FBS2dkLEVBQVksU0FBUy9jLEVBQUt3YyxHQUNqQyxRQUFJLElBQVdBLEVBQVUsUUFBSSxJQUFXM2hCLEVBQVE4SSxlQUFlM0QsSUFBUStjLEVBQVcvYyxLQUFTbU0sRUFBZW5NLElBQVEyVyxFQUFPM1csR0FBSyxLQUFPLElBQU8rQixFQUFRL0IsRUFBSytjLEVBQVcvYyxJQUFNLE9BQUksT0FBUSxHQUFRLEdBQUtuRixFQUFRNEYsUUFBVSxDQUNqTixJQUFJbVMsRUFBVyxJQUFJM1ksRUFBRTRZLE1BQU0sYUFDM0JELEVBQVNFLE1BQVEwSixFQUFTclAsV0FBVzRDLFdBQVcsR0FBSWdRLEdBQWF2RCxFQUNqRSxJQUFJN0UsRUFBTW5MLE9BQXFCLEdBQVEsSUF0Qi9DLFNBQXlCeE0sRUFBSytmLEdBQzFCLElBQUssSUFBSUksRUFBaUJoVixHQUFnQixFQUFJLEdBQUdlLE1BQU1sTSxFQUFLeVcsRUFBU3pXLElBQU0yQyxLQUFLLElBQUloQyxRQUFRLEtBQU0sSUFBS3lmLEVBQWNELEVBQWU1ZixRQUFRd2YsR0FBWSxFQUFJSyxHQUFlLE1BQVFELEVBQWVDLEVBQWMsSUFBTUEsSUFDdE4sSUFBSTliLEVBQVEsSUFBTThiLElBQWdCekosRUFBTzNXLEtBQVMyTixFQUFRM04sR0FBS3NFLE1BQU1vQyxZQUFjcVosRUFBVXpZLE9BQU8sS0FBTSxJQUFPcUcsRUFBUTNOLEdBQUtzRSxNQUFNZ0MsUUFBVXFILEVBQVEzTixHQUFLc0UsTUFBTW9DLFlBQWMsSUFBTXFaLEVBQVV6WSxPQUFPLElBQU0sTUFBUXFHLEVBQVEzTixHQUFLc0UsTUFBTW9DLFlBQWNpSCxFQUFRM04sRUFBTSxHQUFHc0UsTUFBTW9DLFlBQWNxWixFQUFVelksT0FBTyxLQUFNLElBQU9xRyxFQUFRM04sRUFBTSxHQUFHc0UsTUFBTWdDLFFBQVVxSCxFQUFRM04sRUFBTSxHQUFHc0UsTUFBTW9DLFlBQWMsSUFBTXFaLEVBQVV6WSxPQUFPLEtBQ3JaLElBQUtoRCxHQUFTLEVBQUk4YixJQUFnQnpKLEVBQU8zVyxHQUFLLEdBQUksR0FBSyxDQUNuRCxJQUFJcWdCLEVBQVU1SixFQUFTelcsR0FDdkJxQixFQUFVaVUsU0FBUzNDLE1BQVEwTixJQUFZaGYsRUFBVWlVLFNBQVcsQ0FDeEQzQyxNQUFPME4sSUFHZixPQUFPL2IsRUFjSGdjLENBQWdCTixFQUFZRCxJQUFvR3pKLEVBQVN0RCxFQUFjQyxjQUFjMVYsS0FBS3VPLEVBQU84RyxHQUFVLEdBQUksRUFBSTVKLEVBQVEzSCxFQUFVaVUsU0FBUzNDLFVBQ25OcU4sRUFBYTNlLEVBQVVpVSxTQUFTM0MsTUFBUSxFQUFHb04sRUFBWSxJQUR6QnpKLEVBQVN0RCxFQUFjQyxjQUFjMVYsS0FBS3VPLEVBQU84RyxHQUFVLEdBQUksRUFBSTVKLEVBQVEyTyxFQUFNLEdBQ2xEckIsUUFBVSxJQUFXQSxFQUFPdk4sS0FBT2xPLEVBQVE4SSxlQUFlMlMsRUFBT3ZOLE9BQVEsSUFBT2xPLEVBQVE4SSxlQUFlMlMsRUFBT3ZOLEtBQUt6RSxNQUFNZ0MsYUFBVSxJQUFXekwsRUFBUThJLGVBQWUyUyxFQUFPdk4sS0FBS21FLGNBQWdCK1MsRUFBY2paLEtBQUtzUCxFQUFPdk4sS0FDblN4TixJQUFVK2EsRUFBT3BELGdCQUFrQm9ELEVBQU92TixJQUFNLElBQUtvUCxPQUFZLEVBQVE3RixJQUFhZ0UsRUFBT3BELGdCQUFpQk4sR0FBVSxHQUN4SHZSLEVBQVVpVSxTQUFXLENBQ2pCM0MsTUFBTzJELEVBQU9wRCxnQkFDZHRELElBQUswRyxFQUFPcEQsaUJBQ2JnTixFQUFlN2UsRUFBVWlVLFVBQVlqVSxFQUFVaVUsU0FBVzRLLEtBRWpFLEVBQUlELEVBQWM5ZSxPQUFRLENBQzFCLElBQUlvZixFQUFNM0wsRUFBVTRMLEVBQVkvSixHQUFVLE9BQUcsR0FBUSxHQUNyRCxJQUFLalksR0FBVzhULE1BQWdCMk4sRUFBYzllLFFBQVVxZixHQUFhaGlCLEdBQVc4VCxNQUFnQixFQUFJMk4sRUFBYzllLFFBQVU4ZSxFQUFjOWUsU0FBV3FmLEdBQWEsSUFBTVAsRUFBYyxHQUFJLElBQUssSUFBSVEsRUFBV0QsT0FBVyxLQUFZRCxFQUFPTixFQUFjOU8sVUFBWSxDQUNsUSxJQUFJeUIsRUFBVyxJQUFJM1ksRUFBRTRZLE1BQU0sYUFDM0IsSUFBSStCLEVBQVcvWixFQUFROEksZUFBZTRjLElBQWdCMVUsZ0JBQWlCLEVBQUkrRyxFQUFTRSxNQUFROEIsRUFBUzlJLE1BQU1pRSxXQUFXLElBQ3RIdUcsRUFBU3RELEVBQWNDLGNBQWMxVixLQUFLdU8sRUFBTzhHLEdBQVUsR0FBSSxFQUFJNUosRUFBUXlYLFVBQ2pFLElBQVduSyxFQUFPdk4sS0FBT3VOLEVBQU92TixNQUFRd1gsR0FBUTFsQixFQUFROEksZUFBZTJTLEVBQU92TixPQUFRLElBQU9sTyxFQUFROEksZUFBZTJTLEVBQU92TixLQUFLekUsTUFBTWdDLE9BQVEyWixFQUFjalosS0FBS3NQLEVBQU92TixVQUFXLElBQUt1TixFQUFRLE1BQzFNbUssU0FDRyxLQUFNRixFQUFPTixFQUFjNWIsUUFBU3VRLEVBQVcvWixFQUFROEksZUFBZTRjLE1BQ2hFM0wsRUFBUy9JLGdCQUFpQixHQUUzQyxHQUFJMFEsRUFBVSxJQUFLLElBQUltRSxLQUFRdkksRUFBWXJNLEVBQU93RyxJQUFhZ0UsRUFBU0EsRUFBT3BELHFCQUFrQixFQUFRNE0sR0FBbUIsSUFBSTdsQixFQUFFNFksTUFBTSxZQUFhaU4sR0FBbUIsVUFBWUEsRUFBZ0J2SCxNQUNwTTFkLEVBQVE4SSxnQkFBZ0IsSUFBTzlJLEVBQVE4SSxlQUFlK2MsR0FBTXBjLE1BQU11QyxrQkFBb0JoTSxFQUFROEksZUFBZStjLEdBQU03VSxlQUV2SCxTQUFTbkssR0FBY29LLEdBQ25CLEdBQUlBLEVBQU8sQ0FDUCxRQUFJLElBQVdBLEVBQU16SyxVQUFXLE9BQU95SyxFQUFNbkssTUFDN0NtSyxFQUFNekssV0FBYXlLLEVBQU16SyxVQUFVdkcsY0FBZ0I0akIsR0FBZ0I1UyxFQUFPQSxFQUFNekssVUFBVXVYLFdBQVUsSUFFeEcsSUFBSStILEVBQVUsR0FBSXBILEVBQU0xZSxFQUFROEksZUFDaEMsSUFBSyxJQUFJaWQsS0FBUXJILEVBQUtBLEVBQUlxSCxJQUFTckgsRUFBSXFILEdBQU10YyxRQUFVLEdBQUtpVixFQUFJcUgsR0FBTXRjLE1BQU1nQyxTQUFVLElBQU9pVCxFQUFJcUgsR0FBTS9VLGlCQUFtQjhVLEVBQVEzWixLQUFLdVMsRUFBSXFILEdBQU05VSxPQUNqSixJQUFJdEMsRUFBZ0IsSUFBTW1YLEVBQVF4ZixPQUFTLElBQU01RixFQUFRb2xCLEVBQVFsZCxVQUFZa2QsR0FBU2hlLEtBQUssSUFDM0YsR0FBSTFJLEVBQUVxRCxXQUFXdEMsRUFBS3lDLFVBQVcsQ0FDN0IsSUFBSW9qQixHQUFldGxCLEVBQVErVyxJQUFZcEcsUUFBUXpJLFVBQVk2TyxLQUFhM1AsS0FBSyxJQUM3RTZHLEVBQWdCeE8sRUFBS3lDLFNBQVNGLEtBQUs4RCxFQUFXd2YsRUFBYXJYLEVBQWV4TyxHQUU5RSxPQUFPd08sRUFFWCxTQUFTNlMsR0FBa0J0VCxHQUN2QixPQUFReE4sR0FBUyxpQkFBbUJ3TixHQUFPL04sRUFBSzJCLFFBQVUsS0FBTzNCLEVBQUtlLGNBQWdCcEIsSUFBT29PLEVBQU1wTyxFQUFHMEcsVUFBVXVYLFlBQVl6WCxPQUFTNEgsR0FDcklBLEVBRUosU0FBU3NNLEdBQU12SixFQUFPNkcsRUFBTy9DLEVBQUtrUixFQUFhQyxHQUMzQyxJQUFJQyxFQUNKLFFBQUksSUFBV3JPLEVBQU8sTUFBTyxtQkFBb0I3RyxHQUFTLGlCQUFrQkEsR0FBUzZHLEVBQVE3RyxFQUFNbVYsZUFDbkdyUixFQUFNOUQsRUFBTW9WLGNBQWdCN25CLEVBQU84bkIsY0FBZ0JILEVBQVEzbkIsRUFBTzhuQixlQUFlQyxXQUFXLElBQ3RGQyx3QkFBd0JDLGFBQWV4VixHQUFTa1YsRUFBTUssMEJBQTRCdlYsSUFBVTZHLEVBQVFxTyxFQUFNTyxZQUNoSDNSLEVBQU1vUixFQUFNUSxXQUFjdG5CLEVBQVNzYSxXQUFhdGEsRUFBU3NhLFVBQVVpTixjQUVuRTdSLEdBREErQyxFQUFRLEdBRDJFcU8sRUFBUTltQixFQUFTc2EsVUFBVWlOLGVBQzVGQyxZQUFZQyxVQUFVLGFBQWM3VixFQUFNekssVUFBVXVYLFlBQVl6WCxTQUNwRTZmLEVBQU1ZLEtBQUt6Z0IsUUFBUyxDQUM5QndSLE1BQU9tTyxFQUFjbk8sRUFBUTBKLEdBQWtCMUosR0FDL0MvQyxJQUFLa1IsRUFBY2xSLEVBQU15TSxHQUFrQnpNLElBRS9DLEdBQUkzVixFQUFFaUssUUFBUXlPLEtBQVcvQyxFQUFNclUsRUFBUW9YLEVBQU0sR0FBS0EsRUFBTSxHQUFJQSxFQUFRcFgsRUFBUW9YLEVBQU0sR0FBS0EsRUFBTSxTQUM3RixJQUFXQSxFQUFNQSxRQUFVL0MsRUFBTXJVLEVBQVFvWCxFQUFNQSxNQUFRQSxFQUFNL0MsSUFBSytDLEVBQVFwWCxFQUFRb1gsRUFBTS9DLElBQU0rQyxFQUFNQSxPQUNwRyxpQkFBbUJBLEVBQU8sQ0FDdEJBLEVBQVFtTyxFQUFjbk8sRUFBUTBKLEdBQWtCMUosR0FDaEQvQyxFQUFNLGlCQURrREEsRUFBTWtSLEVBQWNsUixFQUFNeU0sR0FBa0J6TSxJQUNyRUEsRUFBTStDLEVBQ3JDLElBQUlrUCxFQUFhamEsV0FBV2tFLEVBQU1nVyxjQUFjQyxhQUFlMW9CLEdBQVEyb0Isa0JBQW9CbFcsRUFBTWdXLGNBQWNDLGFBQWUxb0IsR0FBUTJvQixpQkFBaUJsVyxFQUFPLE1BQVFBLEVBQU1tVyxjQUFjQyxVQUFZdFMsRUFDdE0sR0FBSTlELEVBQU1xVyxXQUFhTixFQUFhL1YsRUFBTXNXLFlBQWNQLEVBQWEsRUFBRy9WLEVBQU16SyxVQUFVaVUsU0FBVyxDQUMvRjNDLE1BQU9BLEVBQ1AvQyxJQUFLQSxHQUNONVUsRUFBS2dDLG1CQUFvQixJQUFPaEMsRUFBSytCLFlBQWM0VixJQUFVL0MsSUFBUW1SLEdBQVluUixLQUNwRjlELEtBQVdBLEVBQU16SyxVQUFVaWQsWUFBY3BrQixHQUFVcWtCLGNBQWUsR0FBSSxzQkFBdUJ6UyxFQUFPQSxFQUFNdVcsa0JBQWtCMVAsRUFBTy9DLFFBQVcsR0FBSXZXLEVBQU84bkIsYUFBYyxDQUNuSyxHQUFJSCxFQUFROW1CLEVBQVN1bkIsbUJBQWUsSUFBVzNWLEVBQU13VyxZQUFjLE9BQVN4VyxFQUFNd1csV0FBWSxDQUMxRixJQUFJQyxFQUFXcm9CLEVBQVNzb0IsZUFBZSxJQUN2QzFXLEVBQU0yVyxZQUFZRixHQUV0QnZCLEVBQU0wQixTQUFTNVcsRUFBTXdXLFdBQVkzUCxFQUFRN0csRUFBTXpLLFVBQVV1WCxZQUFZelgsT0FBU3dSLEVBQVE3RyxFQUFNekssVUFBVXVYLFlBQVl6WCxRQUNsSDZmLEVBQU0yQixPQUFPN1csRUFBTXdXLFdBQVkxUyxFQUFNOUQsRUFBTXpLLFVBQVV1WCxZQUFZelgsT0FBU3lPLEVBQU05RCxFQUFNekssVUFBVXVYLFlBQVl6WCxRQUM1RzZmLEVBQU00QixVQUFTLEdBQ2YsSUFBSUMsRUFBTXhwQixFQUFPOG5CLGVBQ2pCMEIsRUFBSUMsa0JBQW1CRCxFQUFJRSxTQUFTL0IsUUFDakNsVixFQUFNa1gsbUJBQW9CaEMsRUFBUWxWLEVBQU1rWCxtQkFBeUJKLFVBQVMsR0FDakY1QixFQUFNaUMsUUFBUSxZQUFhclQsR0FBTW9SLEVBQU1XLFVBQVUsWUFBYWhQLEdBQVFxTyxFQUFNa0MsV0FHcEYsU0FBU0MsR0FBOEJDLEdBQ25DLElBQXNGcmEsRUFBMEoyQyxFQUE1TzdILEVBQVNzSCxHQUFnQixFQUFJcUIsS0FBd0IsR0FBSSxHQUFLZ1IsRUFBSzNaLEVBQU8xQyxPQUFhd1csRUFBTW5MLElBQXdCNlcsRUFBWSxHQUFJQyxFQUFTem9CLEVBQVE4SSxlQUFlZ1UsR0FBTWxNLE9BQVksSUFBVzZYLEVBQVNBLEVBQU9yWCxRQUFRQyxhQUFVLEVBQ3hPLElBQUtuRCxFQUFNNE8sRUFBTSxFQUFHNU8sRUFBTWxGLEVBQU8xQyxPQUFRNEgsSUFDekMwQyxHQURnREMsRUFBVVUsRUFBZ0JyRCxFQUFLMEMsRUFBVzFDLEVBQU0sSUFDNUVrRCxRQUFRQyxRQUFTbVgsRUFBVXRhLEdBQU85TyxFQUFFZ0IsUUFBTyxFQUFJLEdBQUl5USxHQUN2RSxJQUFJNlgsRUFBWUQsUUFBVSxJQUFXQSxFQUFPcFcsWUFBY29XLEVBQU9yWCxRQUFRcVgsRUFBT3BXLGtCQUFlLEVBQy9GLElBQUtuRSxFQUFNeVUsRUFBSyxFQUFHN0YsRUFBTTVPLE1BQVEyQyxFQUFVMlgsRUFBVXRhLElBQWV6RSxNQUFNaUMsYUFBZW1GLEVBQVFwSCxNQUFNeUosb0JBQXNCckMsRUFBUXBILE1BQU1rQyxnQkFBa0IrYyxJQUFjQSxJQUFjRixFQUFVdGEsR0FBS2tELFFBQVFxWCxFQUFPcFcsY0FBZ0IsR0FBS3hCLEVBQVFwSCxNQUFNZ0MsU0FBVSxJQUFPb0YsRUFBUXBILE1BQU1nQyxRQUFVb0YsRUFBUU8sUUFBUXFYLEVBQU9wVyxjQUFnQnlHLEVBQXNCakksRUFBUU8sUUFBUXFYLEVBQU9wVyxhQUFhQyxXQUFXM0osTUFBTSxLQUFNK2YsRUFBVXBXLFdBQVczSixNQUFNLE9BQVMsS0FBT3dJLEVBQVNqRCxHQUFLLEdBQUd0QyxPQUFTNUMsRUFBT2tGLEtBQVNvRCxFQUFlcEQsRUFBSzJDLEVBQVFwSCxRQUFTeUUsSUFBT3lVLElBQzVoQixPQUFPNEYsRUFBbUIsQ0FDdEI5WixFQUFHa1UsRUFDSC9XLElBQUs0YyxFQUFVN0YsR0FBTTZGLEVBQVU3RixHQUFJbFosV0FBUSxHQUMzQ2taLEVBRVIsU0FBU2hTLEdBQWtCM0gsR0FDdkJBLEVBQU8xQyxPQUFTLEVBQ2hCLElBQUssSUFBdUR3RixFQUFuRDZjLEVBQVdyWSxHQUFnQixFQUFJLEdBQUcsT0FBSSxHQUFRLFFBQVcsS0FBWXhFLEVBQU82YyxFQUFTclMsVUFBWXROLEVBQU9tRCxLQUFLTCxHQUN0SCxPQUFPOUMsRUFFWCxTQUFTckYsR0FBV3FGLEdBQ2hCLEdBQUk1SixFQUFFcUQsV0FBV3RDLEVBQUt3RCxZQUFhLE9BQU94RCxFQUFLd0QsV0FBV3FGLEVBQVE3SSxHQUNsRSxHQUFJLE1BQVFBLEVBQUswQixPQUFRLENBQ3JCLElBQUkrbUIsR0FBVyxFQUFJQyxFQUFNUCxJQUE4QixHQUFLUSxFQUFNekwsRUFBYXdMLEVBQUlwYSxHQUNuRixRQUFJLElBQVdvYSxFQUFJamQsS0FBT2lkLEVBQUlqZCxJQUFJRCxnQkFBa0JrZCxFQUFJamQsSUFBSUYsYUFBZW1kLEVBQUlqZCxJQUFJc0gsbUJBQW9CLENBQ25HMFYsR0FBVyxFQUNYLElBQUssSUFBSXJxQixFQUFJLEVBQUdBLEdBQUt1cUIsRUFBS3ZxQixJQUFLLENBQzNCLElBQUkrTSxFQUFPaUcsRUFBZ0JoVCxHQUFHa0wsTUFDOUIsSUFBSSxJQUFPNkIsRUFBS0csYUFBVSxJQUFXekwsRUFBUThJLGVBQWV2SyxLQUFNLElBQU8rTSxFQUFLSSxjQUFlLElBQU9KLEVBQUs0SCxxQkFBc0IsSUFBTzVILEVBQUtHLFFBQVV6QyxFQUFPekssS0FBTytTLEVBQWUvUyxFQUFHK00sR0FBTyxDQUN4THNkLEdBQVcsRUFDWCxRQUlaLE9BQU9BLEdBR2YsU0FBU2hJLEdBQWEzUCxFQUFPekMsRUFBR04sRUFBS0MsRUFBUXNMLEdBQ3pDLElBQUt0WixFQUFLUSxjQUFnQkQsS0FBVzhOLElBQU1tQixFQUFRaU8sVUFBWXBQLEVBQUltQixFQUFRZ08sT0FBU25QLElBQU1tQixFQUFRZ08sU0FBV25QLEVBQUltQixFQUFRaU8sV0FDekhsZCxHQUFRLENBQ0osSUFBSXFvQixFQUFPN2EsRUFBSTZHLElBQ2Y3RyxFQUFJNkcsSUFBTTdHLEVBQUk0SixNQUFPNUosRUFBSTRKLE1BQVFpUixFQUVyQyxJQUE0Q2xNLEVBQXhDQyxFQUFNbkwsT0FBcUIsR0FBUSxHQUN2QyxHQUFJekQsRUFBSTZHLEtBQU8wQyxJQUFZblIsUUFBVXdXLEdBQU81TyxFQUFJNkcsTUFBUTdHLEVBQUk2RyxJQUFNK0gsRUFBTSxHQUFJdE8sSUFBTW1CLEVBQVFpTyxVQUFZMVAsRUFBSTZHLElBQU03RyxFQUFJNEosTUFBUSxJQUFNNUosRUFBSTRKLE1BQVF1RixFQUFhblAsRUFBSTRKLFFBQVV0SixJQUFNbUIsRUFBUWdPLFFBQVV6UCxFQUFJNEosUUFBVTVKLEVBQUk2RyxNQUFRN0csRUFBSTZHLElBQU0rRyxFQUFPNU4sRUFBSTZHLEtBQUssR0FBSSxHQUFNN0csRUFBSTZHLElBQU0sRUFBSTZHLEVBQVMxTixFQUFJNkcsS0FBTyxJQUNqUyxLQUFROEgsRUFBUzNCLEVBQWVoTixJQUFPLENBQ25DLElBQUksSUFBT0MsSUFBVSxJQUFPaE8sRUFBS21ELFlBQWMsT0FBU25ELEVBQUtxQixRQUFVLElBQU1zUixFQUFRNUUsRUFBSTRKLE9BQU9yTyxNQUFNbUMsSUFBSWxHLFFBQVEsS0FBTSxDQUNwSCxJQUFJK1YsRUFBU2xDLEdBQVUsR0FDdkIsR0FBSWtDLEVBQVEsQ0FDUixJQUFJVyxPQUFTLElBQVdYLEVBQU9qQixNQUFRaUIsRUFBT2pCLE1BQVFpQixFQUFPdk4sSUFBTTBOLEVBQVNILEVBQU92TixJQUFJNEosTUFBUTJELEVBQU92TixJQUFJNEosTUFBUTJELEVBQU92TixLQUFPeUQsR0FBc0IsR0FBRyxJQUN4Sm5ELElBQU1tQixFQUFRZ08sUUFBVXpQLEVBQUk0SixNQUFRc0UsSUFBV2xPLEVBQUk0SixRQUc1RCxJQUFPM0osSUFBV25PLEVBQVE0RixFQUFJNEksSUFBTW1CLEVBQVFnTyxPQUFTelAsRUFBSTRKLE1BQVErRSxFQUFTM08sRUFBSTRKLFFBR3RGLFNBQVMrTCxHQUFnQjVTLEVBQU9uSyxHQUM1Qm1LLEVBQU16SyxVQUFVdkcsY0FBZSxFQUFJYixFQUFFcUQsV0FBV3RDLEVBQUttQyxnQkFBa0J3RSxFQUFRM0csRUFBS21DLGFBQWFJLEtBQUs4RCxFQUFXTSxFQUFPM0csSUFBUzJHLEdBQzdGc2EsR0FBU25RLEdBQU8sR0FBSSxFQUF4RG5LLEVBQVFBLEVBQU13TCxXQUFXM0osTUFBTSxLQUFxQ2tILEVBQVk0SCxJQUFZM1AsS0FBSyxLQUNoRzNILEVBQUs4QixzQkFBd0I5QixFQUFLaUMsa0JBQW9CNk8sRUFBTXpLLFVBQVV1WCxjQUFnQnZHLElBQW9CMVAsS0FBSyxNQUFRLElBQU02SixLQUEwQlYsRUFBTXpLLFVBQVVpWCxVQUFVLElBcUh0TCxRQUFJLElBQVc3TixFQUFXLE9BQVFBLEVBQVVqSixRQUMxQyxJQUFLLGFBQ0gsT0FBTzdHLEVBQUs4UCxFQUFVOVAsR0FBSTZELEdBQVc4VCxLQUV2QyxJQUFLLGdCQUNILFlBQU8sSUFBVzNYLFFBQU0sSUFBVzhQLEVBQVU5SSxRQUFVb1ksRUFBY3RQLEVBQVU5SSxNQUMvRW9ZLEdBQWU5ZixFQUFFcUQsV0FBV3RDLEVBQUttQyxlQUFpQm5DLEVBQUttQyxhQUFhSSxLQUFLOEQsRUFBVzBZLEVBQWEvZSxJQUFTK2UsR0FBYXZXLE1BQU0sSUFDN0h5WSxHQUFTMWUsS0FBSzdDLFVBQU0sR0FBUSxHQUFJLEVBQUlxZixHQUFjOWYsRUFBRXFELFdBQVd0QyxFQUFLd0MsZ0JBQWtCeEMsRUFBS3dDLGNBQWNELEtBQUs4RCxPQUFXLEVBQVFpUixJQUFhLEVBQUd0WCxJQUNqSjBHLEdBQWMvRyxHQUVoQixJQUFLLFFBN0hQLFNBQWN3WSxHQXdGVjZHLEVBQVdRLElBQUlySCxHQUNmLElBQUkwUSxFQXhGSixTQUFnQy9YLEVBQU85USxHQThFbkMsYUFBZThRLEVBQU1nWSxRQUFRbGpCLGVBQWlCNUYsRUFBS3VELFdBQVd5SSxLQUFLd0QsRUFBUWtTLE9BQzNFLElBQUlxSCxFQUFjalksRUFBTXhMLGFBQWEsUUFBU3VqQixFQUFjLFVBQVkvWCxFQUFNZ1ksUUFBUWxqQixnQkFBa0IsSUFBTTNHLEVBQUUrVSxRQUFRK1UsRUFBYS9vQixFQUFLc0Qsb0JBQXNCd04sRUFBTWtZLG1CQUFxQixhQUFlbFksRUFBTWdZLFFBQVFsakIsY0FDeE4sSUFBS2lqQixFQUFhLEdBQUksVUFBWS9YLEVBQU1nWSxRQUFRbGpCLGNBQWUsQ0FDM0QsSUFBSWpHLEVBQUtULEVBQVMrcEIsY0FBYyxTQUNoQ3RwQixFQUFHdXBCLGFBQWEsT0FBUUgsR0FBY0YsRUFBYyxTQUFXbHBCLEVBQUc0ZCxLQUFNNWQsRUFBSyxVQUMxRWtwQixFQUFjLFVBQ3JCLE9BQU8sSUFBT0EsRUFuRmQsU0FBNEIzakIsR0FDeEIsSUFBSWlrQixFQUFVQyxFQXlCZCxTQUFTQyxJQUNMLE9BQU8zcEIsS0FBSzJHLFVBQVkzRyxLQUFLMkcsVUFBVXJHLEtBQUs0QixXQUFhbEMsS0FBSzJHLFVBQVVLLGlCQUFtQixJQUFNOEssTUFBMEIsSUFBT3hSLEVBQUs2RCxVQUFZbkUsS0FBSzJHLFVBQVVpZCxZQUFjcGtCLEVBQVNxa0IsaUJBQW1CN2pCLE1BQVFNLEVBQUs4QixzQkFBd0J2QixFQUFRaVEsR0FBa0I4RyxJQUFZcEcsU0FBU3pJLFVBQVkrSCxHQUFrQjhHLElBQVlwRyxVQUFVdkosS0FBSyxJQUFNd2hCLEVBQVM1bUIsS0FBSzdDLE1BQVEsR0FBS3lwQixFQUFTNW1CLEtBQUs3QyxNQUU1WSxTQUFTNHBCLEVBQU8zaUIsR0FDWnlpQixFQUFTN21CLEtBQUs3QyxLQUFNaUgsR0FBUWpILEtBQUsyRyxXQUFhcWQsR0FBZ0Joa0IsS0FBTWlILEdBUXhFLElBQUt6QixFQUFJbUIsVUFBVWtqQixXQUFZLENBQzNCLElBQUksSUFBT3ZwQixFQUFLK0QsZ0JBQWlCLENBQzdCLEdBQUlrQyxPQUFPdWpCLHlCQUEwQixDQUNqQyxtQkFBcUJ2akIsT0FBT3dqQixpQkFBbUJ4akIsT0FBT3dqQixlQUFpQixXQUFhOXFCLEVBQVEsT0FBTytxQixXQUFhLFNBQVNDLEdBQ3JILE9BQU9BLEVBQU9ELFdBQ2QsU0FBU0MsR0FDVCxPQUFPQSxFQUFPNXFCLFlBQVlDLFlBRTlCLElBQUk0cUIsRUFBZ0IzakIsT0FBT3dqQixlQUFpQnhqQixPQUFPdWpCLHlCQUF5QnZqQixPQUFPd2pCLGVBQWV2a0IsR0FBTSxjQUFXLEVBQ25IMGtCLEdBQWlCQSxFQUFjQyxLQUFPRCxFQUFjRSxLQUFPWCxFQUFXUyxFQUFjQyxJQUNwRlQsRUFBV1EsRUFBY0UsSUFBSzdqQixPQUFPOGpCLGVBQWU3a0IsRUFBSyxRQUFTLENBQzlEMmtCLElBQUtSLEVBQ0xTLElBQUtSLEVBQ0xVLGNBQWMsS0FDWixVQUFZOWtCLEVBQUk0akIsUUFBUWxqQixnQkFBa0J1akIsRUFBVyxXQUN2RCxPQUFPenBCLEtBQUt1cUIsYUFDYmIsRUFBVyxTQUFrQnppQixHQUM1QmpILEtBQUt1cUIsWUFBY3RqQixHQUNwQlYsT0FBTzhqQixlQUFlN2tCLEVBQUssUUFBUyxDQUNuQzJrQixJQUFLUixFQUNMUyxJQUFLUixFQUNMVSxjQUFjLFVBRWY5cUIsRUFBU2dyQixrQkFBb0JobEIsRUFBSWdsQixpQkFBaUIsV0FBYWYsRUFBV2prQixFQUFJZ2xCLGlCQUFpQixTQUN0R2QsRUFBV2xrQixFQUFJaWxCLGlCQUFpQixTQUFVamxCLEVBQUlrbEIsaUJBQWlCLFFBQVNmLEdBQ3hFbmtCLEVBQUltbEIsaUJBQWlCLFFBQVNmLElBQzlCcGtCLEVBQUltQixVQUFVa2pCLFdBQWFKLEVBQVVqa0IsRUFBSW1CLFVBQVVpa0IsV0FBYWxCLEVBRXBFbGtCLEVBQUltQixVQUFVdVgsVUFBWSxTQUFTMk0sR0FDL0IsT0FBT2hxQixJQUFTLElBQU9ncUIsRUFBY3BCLEVBQVM1bUIsS0FBSzdDLEtBQUtDLElBQUk2SSxNQUFNLElBQUlDLFVBQVVkLEtBQUssSUFBTXdoQixFQUFTNW1CLEtBQUs3QyxLQUFLQyxLQUMvR3VGLEVBQUltQixVQUFVaVgsVUFBWSxTQUFTM1csRUFBTzRqQixHQUN6Q25CLEVBQVM3bUIsS0FBSzdDLEtBQUtDLEdBQUksTUFBUWdILEVBQVEsSUFBSyxJQUFPNGpCLEdBQWVocUIsRUFBUW9HLEVBQU02QixNQUFNLElBQUlDLFVBQVVkLEtBQUssSUFBTWhCLFNBQ2hILElBQVd3aUIsSUFBYUEsRUFBVyxXQUNsQyxPQUFPenBCLEtBQUtpSCxPQUNieWlCLEVBQVcsU0FBa0J6aUIsR0FDNUJqSCxLQUFLaUgsTUFBUUEsR0F2RXJCLFNBQXNCNFcsR0FDbEIsR0FBSXRlLEVBQUV1ckIsZ0JBQWEsSUFBV3ZyQixFQUFFdXJCLFNBQVNqTixLQUFTLElBQU90ZSxFQUFFdXJCLFNBQVNqTixHQUFNa04sZ0JBQWlCLENBQ3ZGLElBQUlDLEVBQWF6ckIsRUFBRXVyQixTQUFTak4sSUFBU3RlLEVBQUV1ckIsU0FBU2pOLEdBQU1zTSxJQUFNNXFCLEVBQUV1ckIsU0FBU2pOLEdBQU1zTSxJQUFNLFNBQVMxUixHQUN4RixPQUFPQSxFQUFLeFIsT0FDYmdrQixFQUFhMXJCLEVBQUV1ckIsU0FBU2pOLElBQVN0ZSxFQUFFdXJCLFNBQVNqTixHQUFNdU0sSUFBTTdxQixFQUFFdXJCLFNBQVNqTixHQUFNdU0sSUFBTSxTQUFTM1IsRUFBTXhSLEdBQzdGLE9BQU93UixFQUFLeFIsTUFBUUEsRUFBT3dSLEdBRS9CbFosRUFBRXVyQixTQUFTak4sR0FBUSxDQUNmc00sSUFBSyxTQUFhMVIsR0FDZCxHQUFJQSxFQUFLOVIsVUFBVyxDQUNoQixHQUFJOFIsRUFBSzlSLFVBQVVyRyxLQUFLNEIsV0FBWSxPQUFPdVcsRUFBSzlSLFVBQVVLLGdCQUMxRCxJQUFJNFUsRUFBU29QLEVBQVd2UyxHQUN4QixPQUFRLElBQU0zRyxPQUFxQixPQUFRLEVBQVEyRyxFQUFLOVIsVUFBVXhHLFFBQVE4SSxrQkFBbUIsSUFBTzNJLEVBQUs2RCxTQUFXeVgsRUFBUyxHQUVqSSxPQUFPb1AsRUFBV3ZTLElBRXRCMlIsSUFBSyxTQUFhM1IsRUFBTXhSLEdBQ3BCLElBQUkyVSxFQUFTcVAsRUFBV3hTLEVBQU14UixHQUM5QixPQUFPd1IsRUFBSzlSLFdBQWFxZCxHQUFnQnZMLEVBQU14UixHQUFRMlUsR0FFM0RtUCxnQkFBZ0IsSUFvRHJCRyxDQUFhMWxCLEVBQUlxWSxNQTFDeEIsU0FBdUNyWSxHQUNuQzhaLEVBQVdDLEdBQUcvWixFQUFLLGFBQWMsV0FDN0IsSUFBa0J5QixFQUFRakgsS0FBSzJHLFVBQVV1WCxXQUFVLEdBQ25EalgsS0FBV3BHLEVBQVErVyxJQUFZN08sVUFBWTZPLEtBQWEzUCxLQUFLLEtBQU8rYixHQUFnQmhrQixLQUFNaUgsS0F1Q25Fa2tCLENBQThCM2xCLEtBU3JDNGxCLENBQW1CaGEsR0FBU0EsRUFBTXpLLGVBQVksRUFDMUV3aUIsRUFHY2tDLENBQXVCNVMsRUFBTW5ZLEdBQy9DLElBQUksSUFBTzZvQixFQUFhLENBQ1RsWixFQUFNMVEsRUFBakJVLEVBQUt3WSxHQUFtQmpJLEVBQXNCdlEsRUFBR29CLGFBQ2hELEtBRDZENk8sT0FBWSxJQUFXalEsRUFBS0EsRUFBR2lRLGVBQVksS0FDcEZBLE9BQVksR0FBUyxjQUFlalEsR0FBTSxPQUFTQSxFQUFHMkYsYUFBYSxlQUFpQjNGLEVBQUdxckIsVUFBWWhyQixFQUFLa0UsVUFDN0h2RSxFQUFHdXBCLGFBQWEsWUFBYWxwQixFQUFLa0UsYUFBYSxJQUFPMmtCLElBQWdCN29CLEVBQUswQyxnQkFBa0IxQyxFQUFLMEMsa0JBQW9CLElBQU0sQ0FBRSxZQUFhLFVBQVc2QyxRQUFRNUYsRUFBR3NyQixjQUNqSzFiLElBQVd2UCxFQUFLZ0Msa0JBQW1CLEdBQUtnZCxFQUFXQyxHQUFHdGYsRUFBSSxTQUFVcVksRUFBYzJNLGFBQ2xGM0YsRUFBV0MsR0FBR3RmLEVBQUksUUFBU3FZLEVBQWM0TSxZQUFhNUYsRUFBV0MsR0FBR3RmLEVBQUksT0FBUXFZLEVBQWN5TSxXQUM5RnpGLEVBQVdDLEdBQUd0ZixFQUFJLFFBQVNxWSxFQUFjZ00sWUFBYWhGLEVBQVdDLEdBQUd0ZixFQUFJLFVBQVdxWSxFQUFja00sY0FDakdsRixFQUFXQyxHQUFHdGYsRUFBSSxRQUFTcVksRUFBY2lNLFlBQWFqRixFQUFXQyxHQUFHdGYsRUFBSSxhQUFjcVksRUFBY21NLGlCQUNwR25GLEVBQVdDLEdBQUd0ZixFQUFJLGFBQWNxWSxFQUFjME0saUJBQWtCMUYsRUFBV0MsR0FBR3RmLEVBQUksUUFBU3FZLEVBQWM2SixZQUN6RzdDLEVBQVdDLEdBQUd0ZixFQUFJLE1BQU9xWSxFQUFjcU0sVUFBV3JGLEVBQVdDLEdBQUd0ZixFQUFJLFdBQVlLLEVBQUtzQixZQUNyRjBkLEVBQVdDLEdBQUd0ZixFQUFJLGFBQWNLLEVBQUt3QixjQUFld2QsRUFBV0MsR0FBR3RmLEVBQUksVUFBV0ssRUFBS3lCLFdBQ3RGNE4sSUFBVSxJQUFPclAsRUFBSzhELGVBQWlCbkUsRUFBR3FHLGdCQUFnQixjQUFnQmdaLEVBQVdDLEdBQUd0ZixFQUFJLFVBQVdxWSxFQUFjcUksY0FDckhyQixFQUFXQyxHQUFHdGYsRUFBSSxXQUFZcVksRUFBY0MsZ0JBQWlCK0csRUFBV0MsR0FBR3RmLEVBQUksUUFBU3FZLEVBQWNzSyxvQkFDdEd0RCxFQUFXQyxHQUFHdGYsRUFBSSxpQkFBa0JxWSxFQUFjMkwsc0JBQXVCM0UsRUFBV0MsR0FBR3RmLEVBQUksV0FBWXFZLEVBQWM0TCxlQUNySGxVLEVBQVkySCxJQUFvQjFQLEtBQUssSUFDckMsSUFBSTRiLEdBQWlCNWpCLEVBQUcwRyxVQUFVaWQsWUFBY3BrQixHQUFVcWtCLGNBQzFELEdBQUksS0FBTzVqQixFQUFHMEcsVUFBVXVYLFdBQVUsS0FBTyxJQUFPNWQsRUFBSzhCLHNCQUF3QnloQixJQUFrQjVqQixFQUFJLENBQy9GK2pCLEdBQWdCL2pCLEVBQUlBLEVBQUcwRyxVQUFVdVgsV0FBVSxJQUMzQyxJQUFJL1UsRUFBU3lPLElBQVlwRyxTQUN6QixJQUFPMU4sR0FBV3FGLElBQVc3SSxFQUFLaUMsaUJBQW1CcVAsSUFBZ0J0UixFQUFLOEIsc0JBQXdCeWhCLElBQWtCNWpCLEtBQVEsSUFBTTZSLElBQXlCM0ksRUFBUyxHQUFLMkgsR0FBa0IzSCxNQUMxTCxJQUFPN0ksRUFBSzhCLHNCQUF3QjlCLEVBQUswQyxpQkFBbUI2Z0IsSUFBa0I1akIsR0FBTSxLQUFPQSxFQUFHMEcsVUFBVXVYLFdBQVUsS0FBUVQsRUFBWXhkLEVBQUlrSixHQUMzSTBhLElBQWtCNWpCLEdBQU0wYSxHQUFNMWEsRUFBSThiLEVBQVNqSyxRQWVuRDVRLENBQUtqQixHQUNMLE1BRUYsSUFBSyxTQUNILE9BQU9vZixHQUFlOWYsRUFBRXFELFdBQVd0QyxFQUFLbUMsZUFBaUJuQyxFQUFLbUMsYUFBYUksS0FBSzhELEVBQVdvSixFQUFVOUksTUFBTzNHLElBQVN5UCxFQUFVOUksT0FBTzZCLE1BQU0sSUFDNUl5WSxHQUFTMWUsS0FBSzdDLFVBQU0sR0FBUSxHQUFJLEVBQUlxZixHQUFjdFAsRUFBVXhJLFNBQVcsQ0FDbkVOLE1BQU9wRyxFQUFRK1csSUFBWXBHLFFBQVF6SSxVQUFVZCxLQUFLLElBQU0yUCxJQUFZM1AsS0FBSyxJQUN6RVYsU0FBVTVILEVBQVVrRCxLQUFLN0MsS0FBTSxDQUMzQjhHLE9BQVEsZUFDVDNHLEVBQVNHLElBQ1pPLEVBQVErVyxJQUFZcEcsUUFBUXpJLFVBQVVkLEtBQUssSUFBTTJQLElBQVkzUCxLQUFLLElBRXhFLElBQUssVUFDSDhILEVBQVU5SSxPQUFTb1ksR0FBZTlmLEVBQUVxRCxXQUFXdEMsRUFBS21DLGVBQWlCbkMsRUFBS21DLGFBQWFJLEtBQUs4RCxFQUFXb0osRUFBVTlJLE1BQU8zRyxJQUFTeVAsRUFBVTlJLE9BQU82QixNQUFNLElBQ3hKeVksR0FBUzFlLEtBQUs3QyxVQUFNLEdBQVEsR0FBSSxFQUFJcWYsSUFBZ0J0UCxFQUFVOUksTUFBUXBHLEVBQVErVyxJQUFZcEcsUUFBUXpJLFVBQVVkLEtBQUssSUFBTTJQLElBQVkzUCxLQUFLLElBQ3hJLElBQUssSUFBSWtCLEdBQVN5TyxJQUFhNFQsR0FBSy9DLEtBQWlDZ0QsR0FBT3RpQixHQUFPMUMsT0FBUyxFQUFHK2tCLEdBQUtDLEtBQVN4UCxFQUFPd1AsSUFBT0EsTUFDM0gsT0FBT3RpQixHQUFPdUMsT0FBTzhmLEdBQUlDLEdBQU8sRUFBSUQsSUFBSzFuQixHQUFXcUYsS0FBVzRHLEVBQVU5SSxTQUFXcEcsRUFBUStXLElBQVlwRyxRQUFRekksVUFBVWQsS0FBSyxJQUFNMlAsSUFBWTNQLEtBQUssS0FFeEosSUFBSyxlQUNILE9BQU8wUCxJQUFvQjFQLEtBQUssSUFFbEMsSUFBSyxTQUNILEdBQUloSSxHQUFNQSxFQUFHMEcsVUFBVyxDQUNwQnBILEVBQUVzSCxLQUFLNUcsRUFBSSxrQkFBbUIsTUFBT2dRLEVBQU0xUSxFQUFFVSxHQUM3QyxJQUFJeXJCLEdBQUtwckIsRUFBSzRCLFdBQWE4RSxHQUFjL0csR0FBTUEsRUFBRzBHLFVBQVV1WCxVQUFVNWQsRUFBSzRCLFlBQzNFd3BCLEtBQU8vVCxJQUFvQjFQLEtBQUssSUFBTWhJLEVBQUcwRyxVQUFVaVgsVUFBVThOLEdBQUlwckIsRUFBSzRCLFlBQWNqQyxFQUFHMEcsVUFBVWlYLFVBQVUsSUFDM0cwQixFQUFXUSxJQUFJN2YsR0FBS3NHLE9BQU91akIsMEJBQTRCdmpCLE9BQU93akIsZUFBa0N4akIsT0FBT3VqQix5QkFBeUJ2akIsT0FBT3dqQixlQUFlOXBCLEdBQUssVUFDMUlBLEVBQUcwRyxVQUFVa2pCLFlBQWN0akIsT0FBTzhqQixlQUFlcHFCLEVBQUksUUFBUyxDQUMzRWtxQixJQUFLbHFCLEVBQUcwRyxVQUFVa2pCLFdBQ2xCTyxJQUFLbnFCLEVBQUcwRyxVQUFVaWtCLFdBQ2xCTixjQUFjLElBQ1o5cUIsRUFBU2dyQixrQkFBb0J2cUIsRUFBR3VxQixpQkFBaUIsVUFBWXZxQixFQUFHMEcsVUFBVWtqQixhQUFlNXBCLEVBQUd5cUIsaUJBQWlCLFFBQVN6cUIsRUFBRzBHLFVBQVVrakIsWUFDekk1cEIsRUFBRzBxQixpQkFBaUIsUUFBUzFxQixFQUFHMEcsVUFBVWlrQixhQUFjM3FCLEVBQUcwRyxlQUFZLEVBRTNFLE9BQU8xRyxFQUVULElBQUssY0FDSCxHQUFJVixFQUFFaUssUUFBUXJKLEVBQVFvSCxVQUFXLENBQzdCLElBQUlva0IsR0FBYWxiLEdBQWdCLEVBQUksR0FBRyxHQUFJeEksS0FBSyxJQUNqRCxPQUFPMUksRUFBRThGLEtBQUtsRixFQUFRb0gsU0FBVSxTQUFTakMsRUFBS3NtQixHQUMxQyxHQUFJQSxFQUFLMXFCLE9BQVN5cUIsR0FBWSxPQUFPQSxHQUFhQyxHQUFNLElBQ3hERCxHQUVSLE9BQU94ckIsRUFBUW9ILFlBR3hCLFNBQVNuSixFQUFRRCxFQUFTYSxHQUN6QixhQUNBLFNBQVNDLEVBQVFDLEdBQ2IsT0FBT0QsRUFBVSxtQkFBcUJFLFFBQVUsaUJBQW1CQSxPQUFPQyxTQUFXLFNBQWlCRixHQUNsRyxjQUFjQSxHQUNkLFNBQWlCQSxHQUNqQixPQUFPQSxHQUFPLG1CQUFxQkMsUUFBVUQsRUFBSUcsY0FBZ0JGLFFBQVVELElBQVFDLE9BQU9HLFVBQVksZ0JBQWtCSixJQUNqSEEsR0FFZixJQUFJVSxFQUFZWixFQUFvQixHQUFJTyxFQUFJSyxFQUFVd0ksY0FBZTBILEVBQVU5USxFQUFvQixHQUFJNnNCLEVBQWEsQ0FDaEhDLEVBQUcsQ0FBRSx3QkFBeUJDLEtBQUt6c0IsVUFBVTBzQixRQUFTLE1BQU9ELEtBQUt6c0IsVUFBVTJzQixTQUM1RUMsR0FBSSxDQUFFLHlCQUEwQkgsS0FBS3pzQixVQUFVMHNCLFFBQVMsTUFBTyxXQUMzRCxPQUFPRyxFQUFJSixLQUFLenNCLFVBQVUyc0IsUUFBUXBwQixLQUFLN0MsTUFBTyxLQUVsRG9zQixJQUFLLENBQUUsSUFDUEMsS0FBTSxDQUFFLElBQ1J4aUIsRUFBRyxDQUFFLGVBQWdCa2lCLEtBQUt6c0IsVUFBVWd0QixTQUFVLFFBQVMsV0FDbkQsT0FBT1AsS0FBS3pzQixVQUFVaXRCLFNBQVMxcEIsS0FBSzdDLE1BQVEsSUFFaER3c0IsR0FBSSxDQUFFLGdCQUFpQlQsS0FBS3pzQixVQUFVZ3RCLFNBQVUsUUFBUyxXQUNyRCxPQUFPSCxFQUFJSixLQUFLenNCLFVBQVVpdEIsU0FBUzFwQixLQUFLN0MsTUFBUSxFQUFHLEtBRXZEeXNCLElBQUssQ0FBRSxJQUNQQyxLQUFNLENBQUUsSUFDUkMsR0FBSSxDQUFFLFdBQVlaLEtBQUt6c0IsVUFBVXN0QixZQUFhLE9BQVEsV0FDbEQsT0FBT1QsRUFBSUosS0FBS3pzQixVQUFVdXRCLFlBQVlocUIsS0FBSzdDLE1BQU8sS0FFdEQ4c0IsS0FBTSxDQUFFLFdBQVlmLEtBQUt6c0IsVUFBVXN0QixZQUFhLE9BQVEsV0FDcEQsT0FBT1QsRUFBSUosS0FBS3pzQixVQUFVdXRCLFlBQVlocUIsS0FBSzdDLE1BQU8sS0FFdEQrc0IsRUFBRyxDQUFFLGVBQWdCaEIsS0FBS3pzQixVQUFVMHRCLFNBQVUsUUFBU2pCLEtBQUt6c0IsVUFBVTJ0QixVQUN0RUMsR0FBSSxDQUFFLGdCQUFpQm5CLEtBQUt6c0IsVUFBVTB0QixTQUFVLFFBQVMsV0FDckQsT0FBT2IsRUFBSUosS0FBS3pzQixVQUFVMnRCLFNBQVNwcUIsS0FBSzdDLE1BQU8sS0FFbkRtdEIsR0FBSSxDQUFFLFNBQVNDLEdBQ1gsTUFBTyxTQUFTbFcsT0FBT2tXLEVBQUcsTUFDM0JyQixLQUFLenNCLFVBQVUwdEIsU0FBVSxRQUFTLFNBQVNJLEdBQzFDLE9BQU9yQixLQUFLenNCLFVBQVUydEIsV0FFMUJJLEVBQUcsQ0FBRSxpQkFBa0J0QixLQUFLenNCLFVBQVUwdEIsU0FBVSxRQUFTakIsS0FBS3pzQixVQUFVMnRCLFVBQ3hFSyxHQUFJLENBQUUsdUJBQXdCdkIsS0FBS3pzQixVQUFVMHRCLFNBQVUsUUFBUyxXQUM1RCxPQUFPYixFQUFJSixLQUFLenNCLFVBQVUydEIsU0FBU3BxQixLQUFLN0MsTUFBTyxLQUVuRHV0QixHQUFJLENBQUUsU0FBU0gsR0FDWCxNQUFPLFNBQVNsVyxPQUFPa1csRUFBRyxNQUMzQnJCLEtBQUt6c0IsVUFBVTB0QixTQUFVLFFBQVMsU0FBU0ksR0FDMUMsT0FBTyxXQUNILE9BQU9qQixFQUFJSixLQUFLenNCLFVBQVUydEIsU0FBU3BxQixLQUFLN0MsTUFBT290QixNQUd2REksRUFBRyxDQUFFLGNBQWV6QixLQUFLenNCLFVBQVVtdUIsV0FBWSxVQUFXMUIsS0FBS3pzQixVQUFVb3VCLFlBQ3pFQyxHQUFJLENBQUUsNENBQTZDNUIsS0FBS3pzQixVQUFVbXVCLFdBQVksVUFBVyxXQUNyRixPQUFPdEIsRUFBSUosS0FBS3pzQixVQUFVb3VCLFdBQVc3cUIsS0FBSzdDLE1BQU8sS0FFckQ0dEIsRUFBRyxDQUFFLGNBQWU3QixLQUFLenNCLFVBQVV1dUIsV0FBWSxVQUFXOUIsS0FBS3pzQixVQUFVd3VCLFlBQ3pFQyxHQUFJLENBQUUsNENBQTZDaEMsS0FBS3pzQixVQUFVdXVCLFdBQVksVUFBVyxXQUNyRixPQUFPMUIsRUFBSUosS0FBS3pzQixVQUFVd3VCLFdBQVdqckIsS0FBSzdDLE1BQU8sS0FFckQ0TyxFQUFHLENBQUUsV0FBWW1kLEtBQUt6c0IsVUFBVTB1QixnQkFBaUIsZUFBZ0IsV0FDN0QsT0FBTzdCLEVBQUlKLEtBQUt6c0IsVUFBVTJ1QixnQkFBZ0JwckIsS0FBSzdDLE1BQU8sS0FFMURrdUIsRUFBRyxDQUFFLFdBQVluQyxLQUFLenNCLFVBQVUwdUIsZ0JBQWlCLGVBQWdCLFdBQzdELE9BQU83QixFQUFJSixLQUFLenNCLFVBQVUydUIsZ0JBQWdCcHJCLEtBQUs3QyxNQUFPLEtBRTFEa2QsRUFBRyxDQUFFLFFBQ0xrQyxHQUFJLENBQUUsU0FDTitPLEVBQUcsQ0FBRSxRQUNMQyxHQUFJLENBQUUsU0FDTkMsRUFBRyxDQUFFLElBQ0xDLEVBQUcsQ0FBRSxJQUNMQyxFQUFHLENBQUUsS0FDTkMsRUFBYyxDQUNiQyxRQUFTLGFBQ1RDLFFBQVMsV0FDVEMsWUFBYSx3QkFDYkMsZUFBZ0IsZ0NBRXBCLFNBQVNDLEVBQVdqbEIsR0FDaEIsSUFBSWtsQixFQUFhLElBQUk5bUIsT0FBTyxTQUFTMkUsS0FBSy9DLEVBQU0sSUFDaEQsR0FBSWtsQixRQUFjLElBQVdBLEVBQVcsR0FBSSxDQUN4QyxJQUFJQyxFQUFRbEQsRUFBV2ppQixFQUFNLEdBQUcsR0FBSyxLQUFLNEgsTUFBTSxJQUNoRCxPQUFPdWQsRUFBTSxHQUFLQSxFQUFNLEdBQUdELEVBQVcsSUFBS0MsRUFBTSxHQUFLQSxFQUFNLEdBQUdELEVBQVcsSUFBS0MsRUFFbkYsR0FBSWxELEVBQVdqaUIsRUFBTSxJQUFLLE9BQU9paUIsRUFBV2ppQixFQUFNLElBRXRELFNBQVNvbEIsRUFBYTF1QixHQUNsQixJQUFLQSxFQUFLNEosVUFBVyxDQUNqQixJQUFJK2tCLEVBQVMsR0FBSUMsRUFBWSxHQUM3QixJQUFLLElBQUk1cEIsS0FBT3VtQixFQUFZLEdBQUksUUFBUXBnQixLQUFLbkcsR0FBTSxDQUMvQyxJQUFJNnBCLEVBQVc3cEIsRUFBSSxHQUFLLFFBQ3ZCLElBQU00cEIsRUFBVXJwQixRQUFRc3BCLElBQWFELEVBQVU1aUIsS0FBSzZpQixRQUNqRCxJQUFNRixFQUFPcHBCLFFBQVFQLEVBQUksS0FBTzJwQixFQUFPM2lCLEtBQUtoSCxFQUFJLElBQ3hEaEYsRUFBSzRKLFVBQVksS0FBTyxFQUFJZ2xCLEVBQVV6b0IsT0FBU3lvQixFQUFVam5CLEtBQUssS0FBTyxJQUFNLElBQU1nbkIsRUFBT2huQixLQUFLLE1BQVEsUUFDckczSCxFQUFLNEosVUFBWSxJQUFJbEMsT0FBTzFILEVBQUs0SixVQUFXLEtBRWhELE9BQU81SixFQUFLNEosVUFpQmhCLFNBQVNuTCxFQUFNdUksRUFBUThuQixFQUFjOXVCLEVBQU0rdUIsR0FDdkMsSUFBZXpsQixFQUFPbWxCLEVBQWxCN3RCLEVBQU8sR0FDWCxJQUFLOHRCLEVBQWExdUIsR0FBTWd2QixVQUFZLEVBQUcxbEIsRUFBUW9sQixFQUFhMXVCLEdBQU1xTSxLQUFLckYsSUFBVyxRQUFJLElBQVc4bkIsRUFBYyxHQUFJTCxFQUFRRixFQUFXamxCLEdBQVExSSxHQUFRLElBQU02dEIsRUFBTSxHQUFLLFNBQVUsT0FBUW5sQixFQUFNLElBQzdMLElBQUssSUFDSDFJLEdBQVEsSUFDUixNQUVGLElBQUssSUFDSEEsR0FBUSxLQUNSLE1BRUYsUUFDRUEsR0FBUXRCLEVBQVVzSSxZQUFZMEIsRUFBTSxTQUNqQyxHQUFJbWxCLEVBQVFGLEVBQVdqbEIsR0FBUSxJQUFJLElBQU95bEIsR0FBT04sRUFBTSxHQUFJLENBRTlEN3RCLEdBRFk2dEIsRUFBTSxHQUNKbHNCLEtBQUt1c0IsRUFBYUcsV0FDN0JSLEVBQU0sR0FBSzd0QixHQUFRa3VCLEVBQWEsTUFBUUwsRUFBTSxJQUFNN3RCLEdBQVEwSSxFQUFNLFFBQVMxSSxHQUFRMEksRUFBTSxHQUNoRyxPQUFPMUksRUFFWCxTQUFTaXJCLEVBQUlxRCxFQUFLQyxHQUNkLElBQUtELEVBQU1sYSxPQUFPa2EsR0FBTUMsRUFBTUEsR0FBTyxFQUFHRCxFQUFJL29CLE9BQVNncEIsR0FBT0QsRUFBTSxJQUFNQSxFQUN4RSxPQUFPQSxFQUVYLFNBQVM5dkIsRUFBWWd3QixFQUFZcG9CLEVBQVFoSCxHQUNyQyxJQUVHcXZCLEVBQStCL2xCLEVBQU9nbUIsRUFGckNDLEVBQVUsQ0FDVk4sS0FBTSxJQUFJeEQsS0FBSyxFQUFHLEVBQUcsSUFDVjdxQixFQUFPd3VCLEVBS3RCLFNBQVNsb0IsRUFBU3FvQixFQUFTNW9CLEVBQU8zRyxHQUM5QnV2QixFQUFRRixHQUxaLFNBQXdCMW9CLEdBRXBCLE9BRHFCQSxFQUFNaEIsUUFBUSxVQUFXLEtBSXhCNnBCLENBQWU3b0IsR0FBUTRvQixFQUFRLE1BQVFGLEdBQWMxb0IsT0FDM0UsSUFBVzJvQixHQUFpQkEsRUFBYy9zQixLQUFLZ3RCLEVBQVFOLEtBQU0sU0FBV0ksRUFBYXppQixTQUFTMmlCLEVBQVFGLElBQWUsRUFBSUUsRUFBUUYsSUFFckksR0FBSSxpQkFBbUJ6dUIsRUFBTSxDQUN6QixJQUFLOHRCLEVBQWExdUIsR0FBTWd2QixVQUFZLEVBQUcxbEIsRUFBUW9sQixFQUFhMXVCLEdBQU1xTSxLQUFLckYsSUFBVyxDQUM5RSxJQUFJTCxFQUFRL0YsRUFBS3NRLE1BQU0sRUFBRzVILEVBQU0sR0FBR25ELFFBQ25Db2xCLEVBQVdsZSxlQUFlL0QsRUFBTSxNQUFRK2xCLEVBQWE5RCxFQUFXamlCLEVBQU0sSUFBSSxHQUFJZ21CLEVBQWdCL0QsRUFBV2ppQixFQUFNLElBQUksR0FDbkhwQyxFQUFTcW9CLEVBQVM1b0IsSUFBZS9GLEVBQU9BLEVBQUtzUSxNQUFNdkssRUFBTVIsUUFFN0QsT0FBT29wQixFQUVYLEdBQUkzdUIsR0FBUSxXQUFhakMsRUFBUWlDLElBQVNBLEVBQUt5TSxlQUFlLFFBQVMsT0FBT3pNLEVBRWxGLFNBQVM2dUIsRUFBV0YsRUFBU3Z2QixHQUN6QixJQUFJc0osRUFBTzJsQixFQUFPLEdBQ2xCLElBQUtQLEVBQWExdUIsR0FBTWd2QixVQUFZLEVBQUcxbEIsRUFBUW9sQixFQUFhMXVCLEdBQU1xTSxLQUFLck0sRUFBSzB2QixjQUFnQixNQUFRcG1CLEVBQU0sR0FBR2dELE9BQU8sR0FBSzJpQixHQUFRcEQsRUFBSTBELEVBQVE1RCxVQUFXcmlCLEVBQU0sR0FBR25ELFFBQVUsTUFBUW1ELEVBQU0sR0FBR2dELE9BQU8sR0FBSzJpQixHQUFRcEQsRUFBSTBELEVBQVF0RCxXQUFhLEVBQUczaUIsRUFBTSxHQUFHbkQsUUFBVSxTQUFXbUQsRUFBTSxHQUFLMmxCLEdBQVFNLEVBQVFoRCxjQUFjcGEsV0FBYSxNQUFRN0ksRUFBTSxHQUFHZ0QsT0FBTyxLQUFPMmlCLEdBQVFwRCxFQUFJMEQsRUFBUUksVUFBV3JtQixFQUFNLEdBQUduRCxTQUN2WSxPQUFPOG9CLEVBRVgsU0FBU1csRUFBYzdoQixFQUFLL04sR0FDeEIsSUFBaUJtVixFQUFhN0wsRUFBMUJ1bUIsRUFBVSxFQUF1QkMsRUFBYyxFQUNuRCxJQUFLcEIsRUFBYTF1QixHQUFNZ3ZCLFVBQVksRUFBRzFsQixFQUFRb2xCLEVBQWExdUIsR0FBTXFNLEtBQUtyTSxFQUFLMHZCLGNBQWdCLENBQ3hGLElBQUlsQixFQUFhLElBQUk5bUIsT0FBTyxTQUFTMkUsS0FBSy9DLEVBQU0sSUFDaEQsR0FDQXlFLElBRDBFOGhCLEdBQXRFQyxFQUFjdEIsRUFBYTVoQixTQUFTNGhCLEVBQVcsSUFBTWxsQixFQUFNLEdBQUduRCxRQUNsRCxDQUNaZ1AsRUFBYzdMLEVBQU9BLEVBQVFvbEIsRUFBYTF1QixHQUFNcU0sS0FBS3JNLEVBQUswdkIsYUFDMUQsT0FHUixNQUFPLENBQ0hLLGlCQUFrQkYsRUFBVUMsRUFDNUJyVCxVQUFXblQsRUFDWDZMLFlBQWFBLEdBR3JCN1YsRUFBVWlJLGNBQWMsQ0FDcEJ5b0IsU0FBVSxDQUNOcHZCLEtBQU0sU0FBY1osR0FDaEIsT0FBT0EsRUFBS1EsY0FBZSxFQUFJK3FCLEVBQVcwQyxFQUFJanVCLEVBQUtpd0IsS0FBS0MsY0FBY3ZvQixLQUFLLEtBQzNFM0gsRUFBSzB2QixZQUFjeEIsRUFBWWx1QixFQUFLMHZCLGNBQWdCMXZCLEVBQUswdkIsWUFBYTF2QixFQUFLbXdCLGNBQWdCakMsRUFBWWx1QixFQUFLbXdCLGdCQUFrQm53QixFQUFLbXdCLGVBQWlCbndCLEVBQUswdkIsWUFDekoxdkIsRUFBS293QixhQUFlbEMsRUFBWWx1QixFQUFLb3dCLGVBQWlCcHdCLEVBQUtvd0IsY0FBZ0Jwd0IsRUFBSzB2QixZQUNoRjF2QixFQUFLZSxZQUFjLEtBQU9mLEVBQUtlLFlBQWNmLEVBQUtlLFlBQWNmLEVBQUswdkIsWUFBWS9wQixRQUFRLFFBQVMsSUFDbEczRixFQUFLcUIsTUFBUTVDLEVBQU11QixFQUFLMHZCLGlCQUFhLEVBQVExdkIsR0FBT0EsRUFBSzRLLElBQU14TCxFQUFZWSxFQUFLNEssSUFBSzVLLEVBQUswdkIsWUFBYTF2QixHQUN2R0EsRUFBSzZLLElBQU16TCxFQUFZWSxFQUFLNkssSUFBSzdLLEVBQUswdkIsWUFBYTF2QixHQUFPLE1BRTlEZSxZQUFhLEdBQ2IydUIsWUFBYSxjQUNiUyxtQkFBZSxFQUNmQyxrQkFBYyxFQUNkeGxCLElBQUssS0FDTEMsSUFBSyxLQUNMaEksMEJBQTJCLEdBQzNCb3RCLEtBQU0sQ0FDRkksU0FBVSxDQUFFLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sU0FBVSxVQUFXLFlBQWEsV0FBWSxTQUFVLFdBQVksVUFDaklDLFdBQVksQ0FBRSxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxVQUFXLFdBQVksUUFBUyxRQUFTLE1BQU8sT0FBUSxPQUFRLFNBQVUsWUFBYSxVQUFXLFdBQVksWUFDaE5KLGNBQWUsQ0FBRSxLQUFNLEtBQU0sS0FBTSxPQUV2Q3pzQixjQUFlLFNBQXVCb0YsRUFBUWtGLEVBQUtnQixFQUFHMEwsRUFBYXphLEVBQU1ILEVBQVN5YSxFQUFVdE0sR0FDeEYsR0FBSUEsRUFBUSxPQUFPLEVBQ25CLEdBQUlyQixNQUFNb0MsSUFBTWxHLEVBQU9rRixLQUFTZ0IsRUFBRyxDQUMvQixJQUFJd2hCLEVBQWFYLEVBQWM3aEIsRUFBSy9OLEdBQ3BDLEdBQUl1d0IsRUFBVzlULFdBQWE4VCxFQUFXOVQsVUFBVSxLQUFPMU4sR0FBSyxFQUFJd2hCLEVBQVdwYixZQUFZLEdBQUdoUCxPQUFRLENBQy9GLElBQUk3QixFQUFZaW5CLEVBQVdnRixFQUFXcGIsWUFBWSxJQUFJLEdBQ3RELEdBQUksSUFBSXpOLE9BQU9wRCxHQUFXNkcsS0FBSyxJQUFNdEMsRUFBT2tGLEVBQU0sSUFBSyxPQUFPbEYsRUFBT2tGLEdBQU9sRixFQUFPa0YsRUFBTSxHQUN6RmxGLEVBQU9rRixFQUFNLEdBQUssSUFBSyxDQUNuQitPLE9BQU8sRUFDUGpVLE9BQVFBLEVBQ1IyTyxrQkFBbUIsQ0FDZjFDLE1BQU8vRyxFQUFNLEVBQ2I2RyxJQUFLN0csRUFBTSxHQUVmQSxJQUFLQSxFQUFNLElBSXZCLE9BQU8sR0FFWHJLLGVBQWdCLFNBQXdCbUYsRUFBUWtGLEVBQUtnQixFQUFHQyxFQUFlaFAsRUFBTUgsRUFBU21PLEdBQ2xGLEdBQUlBLEVBQVEsT0FBTyxFQUNuQixJQUFJdWlCLEVBQVlqc0IsRUFDaEIsSUFBSSxJQUFPMEssRUFBZSxPQUFPdWhCLEVBQWFYLEVBQWM3aEIsRUFBTSxFQUFHL04sSUFBa0JtVixhQUFlb2IsRUFBV1IsbUJBQXFCaGlCLEdBQU8sRUFBSXdpQixFQUFXcGIsWUFBWSxHQUFHaFAsYUFBVSxJQUFXb2xCLEVBQVdnRixFQUFXcGIsWUFBWSxNQUFRN1EsRUFBWWluQixFQUFXZ0YsRUFBV3BiLFlBQVksSUFBSSxHQUM1UixJQUFJek4sT0FBT3BELEdBQVc2RyxLQUFLLElBQU00RCxJQUFNLENBQ25DaU0sT0FBUSxDQUFFLENBQ05qTixJQUFLQSxFQUNMZ0IsRUFBRyxLQUNKLENBQ0NoQixJQUFLQSxFQUFNLEVBQ1hnQixFQUFHQSxJQUVQaEIsSUFBS0EsRUFBTSxHQUNYaUIsRUFDSixHQUFJQSxFQUFjOE4sUUFBVWpVLEVBQVNtRyxFQUFjbkcsT0FBUWtGLEVBQU1pQixFQUFjakIsTUFDL0V3aUIsRUFBYVgsRUFBYzdoQixFQUFLL04sSUFBa0JtVixhQUFlb2IsRUFBV3BiLFlBQVksU0FBTSxJQUFXb1csRUFBV2dGLEVBQVdwYixZQUFZLElBQUssQ0FDNUk3USxFQUFZaW5CLEVBQVdnRixFQUFXcGIsWUFBWSxJQUFJLEdBQ2xELElBQUlxYixFQUFPM25CLEVBQU9xSSxNQUFNcWYsRUFBV1IsaUJBQWtCUSxFQUFXUixpQkFBbUJRLEVBQVdwYixZQUFZLEdBQUdoUCxTQUM3RyxJQUFPLElBQUl1QixPQUFPcEQsR0FBVzZHLEtBQUtxbEIsRUFBSzdvQixLQUFLLE1BQVEsSUFBTTRvQixFQUFXcGIsWUFBWSxHQUFHaFAsUUFBVXRHLEVBQVE4SSxlQUFlNG5CLEVBQVdSLG1CQUFxQmx3QixFQUFROEksZUFBZTRuQixFQUFXUixpQkFBbUIsS0FBT2x3QixFQUFROEksZUFBZTRuQixFQUFXUixpQkFBbUIsR0FBR2pmLE1BQVEsS0FFclIsSUFBSXdLLEVBQVN0TSxFQUFleWhCLEVBQVlyeEIsRUFBWXlKLEVBQU9sQixLQUFLLElBQUszSCxFQUFLMHZCLFlBQWExdkIsR0FDdkYsT0FBT3NiLEdBQVVtVixFQUFVeEIsS0FBS3lCLFdBQWFELEVBQVV4QixLQUFLeUIsWUFDNURwVixHQUQwRUEsRUFoSnRGLFNBQXFCbVYsRUFBV3poQixHQUM1QixRQUFTcUMsU0FBU29mLEVBQVVFLFNBQVcsTUFBUUYsRUFBVUcsTUFBUXZmLFNBQVNvZixFQUFVSSxVQUFZLElBQUlwRixLQUFLZ0YsRUFBVXhCLEtBQUsxQyxjQUFlbGIsU0FBU29mLEVBQVVLLFVBQVlMLEVBQVVNLE1BQVFOLEVBQVV4QixLQUFLaEQsV0FBYSxFQUFHLEdBQUdOLFdBQWE4RSxFQUFVRyxNQUFRNWhCLEVBK0k5SmdpQixDQUFZUCxFQUFXblYsS0E3SXRILFNBQXVCbVYsRUFBV3p3QixHQUM5QixJQUFJc2IsR0FBUyxFQUNiLEdBQUl0YixFQUFLNEssSUFBSyxDQUNWLEdBQUk2bEIsRUFBVUksUUFBUyxDQUNuQixJQUFJSSxFQUFVUixFQUFVSSxRQUFRbHJCLFFBQVEsVUFBVyxJQUNuRDJWLEVBRGtFdGIsRUFBSzRLLElBQUlzbUIsS0FBS2pQLE9BQU8sRUFBR2dQLEVBQVE5cUIsU0FDOUU4cUIsRUFFeEJSLEVBQVVTLE9BQVNULEVBQVVJLFNBQVc3d0IsRUFBSzRLLElBQUlxa0IsS0FBS3lCLFdBQWExd0IsRUFBSzRLLElBQUlxa0IsS0FBS3lCLFlBQWNwVixFQUFTdGIsRUFBSzRLLElBQUlxa0IsS0FBS3lCLFdBQWFELEVBQVV4QixLQUFLeUIsV0FFdEosT0FBT3BWLEdBQVV0YixFQUFLNkssS0FBTzdLLEVBQUs2SyxJQUFJb2tCLEtBQUt5QixXQUFhMXdCLEVBQUs2SyxJQUFJb2tCLEtBQUt5QixZQUFjcFYsRUFBU3RiLEVBQUs2SyxJQUFJb2tCLEtBQUt5QixXQUFhRCxFQUFVeEIsS0FBS3lCLFdBQ3ZJcFYsRUFvSTJCNlYsQ0FBY1YsRUFBV3p3QixJQUFRK04sR0FBT3VOLEdBQVV0TSxFQUFjakIsTUFBUUEsRUFBTSxDQUM3RmxGLE9BQVFwSyxFQUFNdUIsRUFBSzB2QixZQUFhZSxFQUFXendCLEdBQU13SSxNQUFNLElBQ3ZEZ1Asa0JBQW1CLENBQ2YxQyxNQUFPL0csRUFDUDZHLElBQUs1RixFQUFjakIsTUFFdkJ1TixHQUVScFosVUFBVyxTQUFtQm1kLEVBQUd4VyxFQUFReVIsRUFBVXRhLEdBRS9DcWYsRUFBRU0sU0FBV04sRUFBRTdQLFVBQVlBLEVBQVEwUixRQUFVeGhCLEtBQUsyRyxVQUFVaVgsVUFBVW1TLEVBQVcsSUFBSWhFLEtBQVF6ckIsSUFDN0ZmLEVBQUVTLE1BQU15SCxRQUFRLGNBRXBCMUUsU0FBVSxTQUFrQjhMLEVBQWFDLEVBQWV4TyxHQUNwRCxPQUFPd08sRUFBZ0IvUCxFQUFNdUIsRUFBS293QixhQUFjaHhCLEVBQVltUCxFQUFhdk8sRUFBSzB2QixZQUFhMXZCLEdBQU9BLEdBQU0sR0FBTXdPLEdBRWxIdkssT0FBUSxTQUFnQmtVLEVBQU1oTixFQUFNNEMsRUFBS3BGLEdBQ3JDLE9BQU8sR0FBS3dDLEVBQUtPLFVBQVVuRyxRQUFRLFFBQVU0UyxFQUFLdlMsY0FBZ0IsR0FBS3VGLEVBQUtPLFVBQVVuRyxRQUFRLFFBQVU0UyxFQUFLQyxjQUFnQkQsR0FFakloVyxhQUFjLFNBQXNCaXZCLEVBQWNweEIsR0FDOUMsTUFBTyxrQkFBb0JpRyxPQUFPakgsVUFBVW1ULFNBQVM1UCxLQUFLNnVCLEtBQWtCQSxFQUFlM0IsRUFBVzJCLEVBQWNweEIsSUFDcEhveEIsR0FFSnJ2QixZQUFZLEVBQ1pxQyxnQkFBZ0IsRUFDaEJqQixZQUFZLEVBQ1plLFVBQVcsYUFFZnBHLEVBQU9ELFFBQVV5QixHQUN0QixTQUFTeEIsRUFBUUQsRUFBU2EsR0FDekIsYUFDQSxJQUFJWSxFQUFZWixFQUFvQixHQUFJTyxFQUFJSyxFQUFVd0ksY0FBZTBILEVBQVU5USxFQUFvQixHQUNuRyxTQUFTMnlCLEVBQVdDLEVBQUt0eEIsR0FDckIsSUFBSyxJQUFJdXhCLEVBQWEsR0FBSW56QixFQUFJLEVBQUdBLEVBQUlrekIsRUFBSW5yQixPQUFRL0gsSUFBS2tCLEVBQVVOLFVBQVVvQixZQUFZa3hCLEVBQUlobEIsT0FBT2xPLEtBQU80QixFQUFLSSxZQUFZa3hCLEVBQUlobEIsT0FBT2xPLEtBQU80QixFQUFLZ0IsZUFBZSxLQUFPc3dCLEVBQUlobEIsT0FBT2xPLElBQU00QixFQUFLZ0IsZUFBZSxLQUFPc3dCLEVBQUlobEIsT0FBT2xPLElBQU00QixFQUFLaUIsaUJBQWlCLEtBQU9xd0IsRUFBSWhsQixPQUFPbE8sSUFBTTRCLEVBQUtpQixpQkFBaUIsS0FBT3F3QixFQUFJaGxCLE9BQU9sTyxJQUFNNEIsRUFBS2tCLFlBQVksS0FBT293QixFQUFJaGxCLE9BQU9sTyxJQUFNNEIsRUFBS2tCLFlBQVksS0FBT293QixFQUFJaGxCLE9BQU9sTyxJQUFNNEIsRUFBS21CLG1CQUFxQm13QixFQUFJaGxCLE9BQU9sTyxHQUFLbXpCLEdBQWMsS0FBT0QsRUFBSWhsQixPQUFPbE8sR0FBS216QixHQUFjRCxFQUFJaGxCLE9BQU9sTyxHQUN6ZixPQUFPbXpCLEVBRVgsU0FBU0MsRUFBWTNvQixFQUFReVYsRUFBUXRlLEVBQU15eEIsR0FDdkMsR0FBSSxFQUFJNW9CLEVBQU8xQyxRQUFVLEVBQUltWSxLQUFZdGUsRUFBSzB4QixnQkFBa0JELEdBQVEsQ0FDcEUsSUFBSUUsRUFBZ0IxeUIsRUFBRStVLFFBQVFoVSxFQUFLZ0QsV0FBWTZGLElBQzlDLElBQU04b0IsSUFBa0I5b0IsRUFBT21ELEtBQUtoTSxFQUFLZ0QsWUFBYTJ1QixFQUFnQjlvQixFQUFPMUMsT0FBUyxHQUN2RixJQUFLLElBQUkvSCxFQUFJLEVBQUdBLEdBQUtrZ0IsRUFBUWxnQixJQUFLaVQsU0FBU3hJLEVBQU84b0IsRUFBZ0J2ekIsTUFBUXlLLEVBQU84b0IsRUFBZ0J2ekIsR0FBSyxLQUUxRyxPQUFPeUssRUFFWCxTQUFTK29CLEVBQWNDLEVBQVFoeUIsR0FDM0IsSUFBSWdTLEVBQVMsRUFDYixHQUFJLE1BQVFnZ0IsRUFBUSxDQUNoQixJQUFLaGdCLEtBQVVoUyxFQUFROEksZ0JBQ3ZCa0osRUFBU2pGLFNBQVNpRixHQUV0QixJQUFLLElBQUlpZ0IsS0FBVWp5QixFQUFRaUosTUFBTyxHQUErQitJLElBQTNCaWdCLEVBQVNsbEIsU0FBU2tsQixJQUEyQixJQUFLLElBQUk5c0IsRUFBTSxFQUFHK3NCLEVBQU9seUIsRUFBUWlKLE1BQU1ncEIsR0FBUTNyQixPQUFRbkIsRUFBTStzQixFQUFNL3NCLElBQU8sU0FBSyxJQUFXbkYsRUFBUThJLGVBQWVtcEIsSUFBVyxNQUFRRCxJQUFXaHlCLEVBQVFpSixNQUFNZ3BCLEdBQVE5c0IsR0FBS3NFLE1BQU1tQyxNQUFRb21CLEVBQVEsT0FBT0MsUUFBVSxJQUFXanlCLEVBQVE4SSxlQUFlbXBCLElBQVcsTUFBUUQsRUFBUyxFQUFJLEdBQ3RXLE9BQU9oZ0IsRUFFWCxTQUFTbWdCLEVBQVVILEVBQVFoeUIsR0FDdkIsSUFBSW95QixHQUFPLEVBQ1gsT0FBT2h6QixFQUFFOEYsS0FBS2xGLEVBQVE4SSxlQUFnQixTQUFTM0QsRUFBS2dOLEdBQ2hELEdBQUlBLEdBQU9BLEVBQUkxSSxNQUFNbUMsTUFBUW9tQixFQUFRLE9BQU9JLEVBQU1ybEIsU0FBUzVILElBQU0sSUFDakVpdEIsRUF3Q1IsU0FBU0MsRUFBaUJwa0IsRUFBTWpPLEVBQVNrTyxFQUFLQyxFQUFRaE8sR0FDbEQsSUFBSXdlLEVBQVczZSxFQUFRZ0osT0FBU2hKLEVBQVFnSixPQUFPdEQsUUFBUXZGLEVBQUtnRCxhQUFlLEVBQUdzWSxHQUFVLElBQU1rRCxHQUFZLElBQUk5VyxPQUFPLFlBQXNCeUQsS0FBSzJDLEdBQ2hKLE9BQU85TixFQUFLaUQsYUFBZXFZLEdBQVUsTUFBUXpiLEVBQVE4SSxlQUFlNlYsR0FBWSxDQUM1RXhELE9BQVEsQ0FDSmpOLElBQUt5USxJQUFhelEsRUFBTXlRLEVBQVcsRUFBSUEsRUFDdkN6UCxFQUFHL08sRUFBS2dELFlBRVorSyxJQUFLQSxHQUNMdU4sRUFPUmhjLEVBQVVpSSxjQUFjLENBQ3BCNHFCLFFBQVMsQ0FDTHZ4QixLQTlDUixTQUFpQlosR0FDYkEsRUFBSzBCLE9BQVMsRUFBRzFCLEVBQUtrRCxpQkFBbUJsRCxFQUFLZ0QsWUFBY2hELEVBQUtzZSxRQUFVLE1BQVF0ZSxFQUFLc2UsU0FBVyxNQUFRdGUsRUFBS2dELFdBQWFoRCxFQUFLa0QsZUFBaUIsSUFBTSxNQUFRbEQsRUFBS2dELFdBQWFoRCxFQUFLa0QsZUFBaUIsSUFBTWxELEVBQUtrRCxlQUFpQixJQUNyTyxNQUFRbEQsRUFBS2tELGlCQUFtQmxELEVBQUs2QywrQkFBNEIsR0FBUyxFQUFJN0MsRUFBS2UsWUFBWW9GLFNBQVduRyxFQUFLZSxZQUFjZixFQUFLZSxZQUFZdUwsT0FBTyxJQUNySixlQUFpQnRNLEVBQUtnRSxzQkFBd0IsS0FBT2hFLEVBQUtlLGNBQWdCZixFQUFLZ0UscUJBQXVCLE9BQ3RHLElBQUlvdUIsRUFBYSxJQUFLQyxFQUFnQnJ5QixFQUFLZ0QsWUFDM0MsSUFBT2hELEVBQUtRLG1CQUFnQixJQUFXUixFQUFLc3lCLGdCQUFrQkYsRUFBYSxJQUMzRXB5QixFQUFLZ0UscUJBQXVCLGVBQWlCaEUsRUFBS2dFLHFCQUF1QixNQUFRaEUsRUFBS2dFLHFCQUN0RmhFLEVBQUsweEIsZ0JBQWlCLEVBQUkva0IsTUFBTTNNLEVBQUtzZSxVQUFZdGUsRUFBS3NlLE9BQVMsR0FBSXRlLEVBQUtpRCxhQUFjLEVBQ3RGb3ZCLEVBQWdCLE1BQVFyeUIsRUFBS2dELFdBQWEsSUFBTSxJQUFLLEtBQU9oRCxFQUFLZ0QsaUJBQWMsSUFBV2hELEVBQUtJLFlBQVlpeUIsS0FBbUJyeUIsRUFBS0ksWUFBWWl5QixHQUFpQixHQUNoS3J5QixFQUFLSSxZQUFZaXlCLEdBQWUvdEIsVUFBWSxJQUFNdEUsRUFBS2dELFdBQWEsSUFBS2hELEVBQUtJLFlBQVlpeUIsR0FBZXR4QixZQUFjZixFQUFLZ0QsV0FDNUhoRCxFQUFLSSxZQUFZaXlCLEdBQWUvbUIsUUFBUyxFQUFJdEwsRUFBS0ksWUFBWWl5QixHQUFleG1CLFdBQVksS0FBUTdMLEVBQUtzeUIsZ0JBQWlCLEVBQ3ZIdHlCLEVBQUtRLGNBQWUsR0FDcEIsSUFBa0IySSxFQUFkdkksRUFBTyxNQUNYLEdBQUlBLEdBQVF5d0IsRUFBV3J4QixFQUFLdXlCLE9BQVF2eUIsR0FBTyxLQUFPQSxFQUFLa0QscUJBQWtCLElBQVdsRCxFQUFLSSxZQUFZSixFQUFLa0Qsa0JBQW9CbEQsRUFBS0ksWUFBWUosRUFBS2tELGdCQUFrQixHQUN0S2xELEVBQUtJLFlBQVlKLEVBQUtrRCxnQkFBZ0JvQixVQUFZLElBQU10RSxFQUFLa0QsZUFBaUIsSUFDOUVsRCxFQUFLSSxZQUFZSixFQUFLa0QsZ0JBQWdCbkMsWUFBY2YsRUFBS2tELGVBQWdCbEQsRUFBS0ksWUFBWUosRUFBS2tELGdCQUFnQm9JLFFBQVMsRUFDeEh0TCxFQUFLSSxZQUFZSixFQUFLa0QsZ0JBQWdCMkksV0FBWSxHQUFLakwsR0FBUVosRUFBS3d5QixNQUFNeHlCLElBQVNZLEdBQVEsWUFDM0YsSUFBV1osRUFBS3NlLFFBQVUsSUFBTXRlLEVBQUtzZSxPQUFRLENBQ3pDLElBQUltVSxFQUFLenlCLEVBQUtzZSxPQUFPbk0sV0FBVzNKLE1BQU0sS0FDdEM2SSxTQUFTb2hCLEVBQUcsS0FBT0EsRUFBRyxJQUFNcGhCLFNBQVNvaEIsRUFBRyxJQUFNN3hCLEdBQVF5eEIsRUFBZ0JELEVBQWEsSUFBTXB5QixFQUFLc2UsT0FBUyxLQUFPM1IsTUFBTTNNLEVBQUtzZSxTQUFXLEVBQUkxUixTQUFTNU0sRUFBS3NlLFdBQWF0ZSxFQUFLMHhCLGdCQUFrQnZvQixFQUFVdkksRUFBT3l4QixFQUFnQkQsRUFBYSxNQUFRcHlCLEVBQUtzZSxPQUFTLElBQzlQdGUsRUFBS21ELFlBQWEsR0FBTXZDLEdBQVF5eEIsRUFBZ0JELEVBQWEsSUFBTXB5QixFQUFLc2UsT0FBUyxLQUVyRixPQUFPMWQsR0FBUXl3QixFQUFXcnhCLEVBQUsweUIsT0FBUTF5QixHQUFPWSxHQUFRLE1BQU91SSxJQUFZdkksRUFBTyxDQUFFdUksRUFBVWtvQixFQUFXcnhCLEVBQUsweUIsT0FBUTF5QixHQUFRLE1BQU9ZLElBQ25JWixFQUFLMkIsUUFBUyxFQWhDbEIsU0FBNEIzQixRQUN4QixJQUFXQSxFQUFLMnlCLHFCQUF1QixPQUFTM3lCLEVBQUs0SyxNQUFRNUssRUFBSzRLLElBQU01SyxFQUFLNEssSUFBSXVILFdBQVd4TSxRQUFRLElBQUkrQixPQUFPcEksRUFBVXNJLFlBQVk1SCxFQUFLa0QsZ0JBQWlCLEtBQU0sSUFDakssTUFBUWxELEVBQUtnRCxhQUFlaEQsRUFBSzRLLElBQU01SyxFQUFLNEssSUFBSWpGLFFBQVEzRixFQUFLZ0QsV0FBWSxNQUN6RWhELEVBQUs0SyxJQUFNeUcsU0FBU3JSLEVBQUs0SyxLQUFPZ29CLFdBQVc1eUIsRUFBSzRLLEtBQU9pb0IsSUFBS2xtQixNQUFNM00sRUFBSzRLLE9BQVM1SyxFQUFLNEssSUFBTWtvQixPQUFPQyxZQUNsRyxPQUFTL3lCLEVBQUs2SyxNQUFRN0ssRUFBSzZLLElBQU03SyxFQUFLNkssSUFBSXNILFdBQVd4TSxRQUFRLElBQUkrQixPQUFPcEksRUFBVXNJLFlBQVk1SCxFQUFLa0QsZ0JBQWlCLEtBQU0sSUFDMUgsTUFBUWxELEVBQUtnRCxhQUFlaEQsRUFBSzZLLElBQU03SyxFQUFLNkssSUFBSWxGLFFBQVEzRixFQUFLZ0QsV0FBWSxNQUN6RWhELEVBQUs2SyxJQUFNd0csU0FBU3JSLEVBQUs2SyxLQUFPK25CLFdBQVc1eUIsRUFBSzZLLEtBQU9nb0IsSUFBS2xtQixNQUFNM00sRUFBSzZLLE9BQVM3SyxFQUFLNkssSUFBTWlvQixPQUFPRSxZQUNsR2h6QixFQUFLMnlCLG1CQUFxQixRQXlCUkEsQ0FBbUIzeUIsR0FBT1ksR0F3QnhDNHhCLE1BQU8sU0FBZXh5QixHQUNsQixNQUFPLElBQU1BLEVBQUtrRCxlQUFpQixhQUV2Q29iLE9BQVEsSUFDUm9ULGdCQUFnQixFQUNoQnVCLHFCQUFxQixFQUNyQmp3QixXQUFZLElBQ1pnQixxQkFBc0IsYUFDdEJmLGFBQWEsRUFDYkMsZUFBZ0IsR0FDaEJnd0IsWUFBWSxFQUNaQyxlQUFnQixDQUNaQyxNQUFPLElBQ1BDLEtBQU0sSUFFVmQsT0FBUSxHQUNSRyxPQUFRLEdBQ1I5bkIsSUFBSyxLQUNMQyxJQUFLLEtBQ0x5b0IsS0FBTSxFQUNOQyxnQkFBZ0IsRUFDaEJDLFdBQVkzZ0IsS0FBSzRnQixNQUNqQnZ2QixVQUFXLFVBQ1h3dkIsVUFBVyxDQUNQcmxCLEVBQUcsTUFDSDlFLEVBQUcsVUFFUHhJLFlBQWEsSUFDYlksUUFBUSxFQUNSbUIsWUFBWSxFQUNaZixZQUFZLEVBQ1pILFlBQVksRUFDWmlCLDBCQUEyQixHQUMzQnpDLFlBQWEsQ0FDVHV6QixFQUFHLENBQ0NydkIsVUFBVzR0QixHQUVmMEIsRUFBRyxDQUNDdHZCLFVBQVc0dEIsRUFDWDN0QixpQkFBa0IsS0FFdEJzdkIsSUFBSyxDQUNEdnZCLFVBQVcsU0FBbUJ3SixFQUFNak8sRUFBU2tPLEVBQUtDLEVBQVFoTyxHQUN0RCxPQUFPQSxFQUFLa3pCLGFBQWUsTUFBUXBsQixHQUFRQSxJQUFTOU4sRUFBS216QixlQUFlQyxTQUdoRjFrQixJQUFLLENBQ0RwSyxVQUFXLFNBQW1Cd0osRUFBTWpPLEVBQVNrTyxFQUFLQyxFQUFRaE8sR0FDdEQsT0FBT0EsRUFBS2t6QixZQUFjcGxCLElBQVM5TixFQUFLbXpCLGVBQWVFLFFBSW5FNXZCLGNBQWUsU0FBdUJvRixFQUFRa0YsRUFBS2dCLEVBQUcwTCxFQUFhemEsRUFBTUgsRUFBU3lhLEVBQVV0TSxHQUN4RixJQUFJLElBQU9oTyxFQUFLc3lCLGdCQUFrQnZqQixJQUFNL08sRUFBS2dELFdBQVksT0FBTyxFQUNoRSxJQUFJMlIsRUFDSixHQUFJQSxFQUFVM1UsRUFBSzB6QixXQUFhMXpCLEVBQUswekIsVUFBVTNrQixHQUFJLENBQy9DLEdBQUksRUFBSTRGLEVBQVF4TyxPQUFRLElBQUssSUFBSTJ0QixFQUFVLEdBQUkxMUIsRUFBSSxFQUFHQSxFQUFJdVcsRUFBUXhPLE9BQVEvSCxJQUFLMDFCLEVBQVE5bkIsS0FBSyxDQUN4RitCLElBQUtBLEVBQU0zUCxFQUNYMlEsRUFBRzRGLEVBQVF2VyxHQUNYNFAsUUFBUSxJQUVaLE1BQU8sQ0FDSGdOLE9BQVE4WSxHQUdoQixJQUFJdFYsRUFBV3ZmLEVBQUUrVSxRQUFRaFUsRUFBS2dELFdBQVk2RixHQUFTa3JCLEVBQVVobUIsRUFDN0QsR0FBSUEsRUF4RmhCLFNBQTJCQSxFQUFLZ0IsRUFBR3lQLEVBQVUzZSxFQUFTRyxHQUNsRCxPQUFPQSxFQUFLaUQsYUFBZWpELEVBQUtRLGNBQWdCdU8sSUFBTS9PLEVBQUttekIsZUFBZUUsTUFBUXRsQixHQUFPeVEsSUFBYSxFQUFJQSxHQUFZelAsR0FBSy9PLEVBQUtnRCxtQkFBZ0IsSUFBV25ELEVBQVE4SSxlQUFlb0YsRUFBTSxJQUFNbE8sRUFBUThJLGVBQWVvRixFQUFNLEdBQUcrQyxRQUFVOVEsRUFBS216QixlQUFlRSxRQUFVdGxCLEdBQU8sR0FDN1FBLEVBc0ZrQmltQixDQUFrQmptQixFQUFLZ0IsRUFBR3lQLEVBQVUzZSxFQUFTRyxHQUFPLE1BQVErTyxHQUFLQSxJQUFNL08sRUFBS216QixlQUFlQyxNQUFPLENBQ3hHLElBQUksSUFBT3B6QixFQUFLa3pCLFdBQVksT0FBTyxFQUNuQyxJQUFJZSxHQUFhLEVBQUliLEVBQVFwQixFQUFVLElBQUtueUIsR0FBVXd6QixFQUFPckIsRUFBVSxJQUFLbnlCLEdBQzVFLE9BQVEsSUFBTXV6QixJQUFVYSxFQUFhLENBQUViLEVBQU9DLEtBQVMsSUFBT1ksRUFBYSxDQUN2RTN0QixPQUFRMnRCLEVBQ1I1WixNQUFPMFosR0FDUCxDQUNBL1ksT0FBUSxDQUFFLENBQ05qTixJQUFLNmpCLEVBQWMsSUFBSy94QixHQUN4QmtQLEVBQUcvTyxFQUFLbXpCLGVBQWVDLE1BQ3ZCOVosYUFBYSxHQUNkLENBQ0N2TCxJQUFLNmpCLEVBQWMsSUFBSy94QixHQUN4QmtQLEVBQUcvTyxFQUFLbXpCLGVBQWVFLEtBQ3ZCL1osaUJBQWEsSUFFakJlLE1BQU8wWixFQUFVL3pCLEVBQUttekIsZUFBZUUsS0FBS2x0QixRQUdsRCxHQUFJNkgsRUFBUSxPQUFPLEVBQ25CLElBQUssSUFBTXdRLElBQVksSUFBT3hlLEVBQUtpRCxjQUFlLElBQU93WCxHQUFlMUwsSUFBTS9PLEVBQUtnRCxpQkFBYyxJQUFXaEQsRUFBS3NlLFNBQVczUixNQUFNM00sRUFBS3NlLFNBQVcsRUFBSTFSLFNBQVM1TSxFQUFLc2UsVUFBWUUsSUFBYXpRLEVBQUssTUFBTyxDQUNyTXNNLE1BQU9yYSxFQUFLaUQsYUFBZThLLElBQVF5USxFQUFXLEVBQUlBLEVBQVcsRUFBSUEsR0FFckUsSUFBSSxJQUFPeGUsRUFBS3N5QixlQUFnQixHQUFJN1gsRUFBYSxDQUM3QyxHQUFJemEsRUFBSzB4QixlQUFnQixNQUFPLENBQzVCeFcsZ0JBQWlCWixFQUFTMUYsS0FFOUIsSUFBSzVVLEVBQUsweEIsZUFBZ0IsQ0FDdEIsR0FBSXBYLEVBQVMzQyxNQUFRNkcsR0FBWWxFLEVBQVMxRixLQUFPNEosRUFBVSxPQUFPelAsSUFBTS9PLEVBQUtnRCxXQUFhLENBQ3RGZ1ksT0FBUSxDQUNKak4sSUFBS3lRLEVBQVcsRUFDaEJ6UCxFQUFHLElBQ0h1SyxhQUFhLEdBRWpCNEIsZ0JBQWlCc0QsR0FDakIsQ0FDQXRELGdCQUFpQnNELEVBQVcsR0FFaEMsR0FBSWxFLEVBQVMzQyxNQUFRNkcsRUFBVSxNQUFPLENBQ2xDdEQsZ0JBQWlCWixFQUFTM0MsTUFBUSxTQUd2QyxJQUFLM1gsRUFBSzJDLGtCQUFvQjNDLEVBQUswQyxrQkFBb0IxQyxFQUFLMHhCLGdCQUFrQixFQUFJMXhCLEVBQUtzZSxRQUFVLEtBQU81ZSxLQUFLMkcsVUFBVWtqQixXQUFXaG5CLEtBQUs3QyxNQUFPLE1BQU8sQ0FDeEp3YixnQkFBaUJzRCxHQUVyQixNQUFPLENBQ0h0RCxnQkFBaUJuTixJQUd6QnJLLGVBQWdCLFNBQXdCbUYsRUFBUWtGLEVBQUtnQixFQUFHQyxFQUFlaFAsRUFBTUgsRUFBU21PLEdBQ2xGLElBQUksSUFBT2dCLEVBQWUsT0FBT0EsRUFDakMsR0FBSWhCLEVBQVEsT0FBTyxFQUNuQixHQUFJLE9BQVNoTyxFQUFLNEssS0FBTyxPQUFTNUssRUFBSzZLLElBQUssQ0FDeEMsSUFBSXFwQixFQUFXbDBCLEVBQUt5QyxTQUFTb0csRUFBT3FJLFFBQVF6SSxVQUFVZCxLQUFLLFNBQUssRUFBUTFJLEVBQUVnQixPQUFPLEdBQUlELEVBQU0sQ0FDdkZ1ekIsZ0JBQWdCLEtBRXBCLEdBQUksT0FBU3Z6QixFQUFLNEssS0FBT3NwQixFQUFXbDBCLEVBQUs0SyxNQUFRc3BCLEVBQVMvaEIsV0FBV2hNLFFBQVVuRyxFQUFLNEssSUFBSXVILFdBQVdoTSxRQUFVK3RCLEVBQVcsR0FBSSxPQUFPLEVBQ25JLEdBQUksT0FBU2wwQixFQUFLNkssS0FBT3FwQixFQUFXbDBCLEVBQUs2SyxJQUFLLE9BQU8sRUFFekQsT0FBT21FLEdBRVh2TSxTQUFVLFNBQWtCOEwsRUFBYUMsRUFBZXhPLEdBQ3BELEdBQUksS0FBT3dPLElBQWlCLElBQU94TyxFQUFLNkQsU0FBVSxPQUFPMkssRUFDekQsSUFBSTJsQixFQUFlNWxCLEVBQVk1SSxRQUFRM0YsRUFBS3V5QixPQUFRLElBQ3BELE9BQTZENEIsR0FBdERBLEVBQWVBLEVBQWF4dUIsUUFBUTNGLEVBQUsweUIsT0FBUSxLQUFpQy9zQixRQUFRLElBQUkrQixPQUFPcEksRUFBVXNJLFlBQVk1SCxFQUFLa0QsZ0JBQWlCLEtBQU0sSUFDOUosS0FBT2xELEVBQUtlLFlBQVl1TCxPQUFPLEtBQU82bkIsRUFBZUEsRUFBYXh1QixRQUFRLElBQUkrQixPQUFPMUgsRUFBS2UsWUFBWXVMLE9BQU8sR0FBSSxLQUFNLE1BQ3ZIdE0sRUFBS3V6QixnQkFBa0IsS0FBT3Z6QixFQUFLZ0QsYUFBZSxJQUFNbXhCLEVBQWE1dUIsUUFBUXZGLEVBQUtnRCxjQUFnQm14QixFQUFlQSxFQUFheHVCLFFBQVFyRyxFQUFVc0ksWUFBWXJGLEtBQUs3QyxLQUFNTSxFQUFLZ0QsWUFBYSxNQUV6TG14QixHQURBQSxFQUFlQSxFQUFheHVCLFFBQVEsSUFBSStCLE9BQU8sSUFBTXBJLEVBQVVzSSxZQUFZNUgsRUFBS216QixlQUFlQyxRQUFTLE1BQzVFenRCLFFBQVEsSUFBSStCLE9BQU9wSSxFQUFVc0ksWUFBWTVILEVBQUttekIsZUFBZUUsTUFBUSxLQUFNLElBQ3ZHUCxPQUFPcUIsSUFBaUJBLEdBRTVCM3dCLFdBQVksU0FBb0JxRixFQUFRN0ksR0FDcEMsSUFBSXVPLEdBQWV2TyxFQUFLUSxhQUFlcUksRUFBT3FJLFFBQVF6SSxVQUFZSSxHQUFRbEIsS0FBSyxJQUMvRSxPQUdBNEcsR0FEb0RBLEdBQXBEQSxHQURBQSxHQURPQSxFQUFjQSxFQUFZNUksUUFBUSxJQUFJK0IsT0FBTyxJQUFNcEksRUFBVXNJLFlBQVk1SCxFQUFLbXpCLGVBQWVDLFFBQVMsTUFDbkZ6dEIsUUFBUSxJQUFJK0IsT0FBT3BJLEVBQVVzSSxZQUFZNUgsRUFBS216QixlQUFlRSxNQUFRLEtBQU0sS0FDM0UxdEIsUUFBUTNGLEVBQUt1eUIsT0FBUSxLQUErQjVzQixRQUFRM0YsRUFBSzB5QixPQUFRLEtBQ3pFL3NCLFFBQVEsSUFBSStCLE9BQU9wSSxFQUFVc0ksWUFBWTVILEVBQUtrRCxnQkFBa0IsYUFBYyxLQUFNLE1BQzlHLE1BQVFsRCxFQUFLZ0QsYUFBZXVMLEVBQWNBLEVBQVk1SSxRQUFRckcsRUFBVXNJLFlBQVk1SCxFQUFLZ0QsWUFBYSxNQUN0R3FPLFNBQVM5QyxJQUVicE0sYUFBYyxTQUFzQml2QixFQUFjcHhCLEdBQzlDLElBQUlnRCxFQUFhaEQsRUFBS2dELFlBQWMsSUFDcENxTyxTQUFTclIsRUFBS3NlLFVBQVl0ZSxFQUFLc2UsT0FBUzFSLFNBQVM1TSxFQUFLc2UsU0FBVSxpQkFBbUI4UyxHQUFnQixXQUFhcHhCLEVBQUs2ZixXQUFhLEtBQU83YyxJQUFlb3VCLEVBQWVBLEVBQWFqZixXQUFXeE0sUUFBUSxJQUFLM0MsSUFDNU0sSUFBSW94QixFQUFhaEQsRUFBYTVvQixNQUFNeEYsR0FBYXF4QixFQUFjRCxFQUFXLEdBQUd6dUIsUUFBUSxZQUFhLElBQUsydUIsRUFBYyxFQUFJRixFQUFXanVCLE9BQVNpdUIsRUFBVyxHQUFHenVCLFFBQVEsVUFBVyxJQUFNLEdBQUk0dUIsRUFBYyxFQUFJSCxFQUFXanVCLE9BQ3JOaXJCLEVBQWVpRCxHQUFlLEtBQU9DLEVBQWN0eEIsRUFBYXN4QixFQUFjQSxHQUM5RSxJQUFJaFcsRUFBUyxFQUNiLEdBQUksS0FBT3RiLElBQWVzYixFQUFTdGUsRUFBSzB4QixlQUFpQjF4QixFQUFLc2UsT0FBU2dXLEVBQVludUIsT0FBU25HLEVBQUtzZSxPQUFTZ1csRUFBWW51QixPQUFTbkcsRUFBS3NlLE9BQ3BJLEtBQU9nVyxJQUFnQnQwQixFQUFLMHhCLGdCQUFpQixDQUN6QyxJQUFJOEMsRUFBZTNoQixLQUFLNGhCLElBQUksR0FBSW5XLEdBQVUsR0FDMUM4UyxFQUFlQSxFQUFhenJCLFFBQVFyRyxFQUFVc0ksWUFBWTVFLEdBQWEsS0FBTTJKLE1BQU1pbUIsV0FBV3hCLE1BQW1CQSxHQUFnQnB4QixFQUFLd3pCLFdBQVdaLFdBQVd4QixHQUFnQm9ELEdBQWdCQSxHQUFjRSxRQUFRcFcsSUFDbE44UyxFQUFlQSxFQUFhamYsV0FBV3hNLFFBQVEsSUFBSzNDLEdBRXhELEdBQUksSUFBTWhELEVBQUtzZSxTQUFXLElBQU04UyxFQUFhN3JCLFFBQVF2QyxLQUFnQm91QixFQUFlQSxFQUFhdUQsVUFBVSxFQUFHdkQsRUFBYTdyQixRQUFRdkMsS0FDbkksT0FBU2hELEVBQUs0SyxLQUFPLE9BQVM1SyxFQUFLNkssSUFBSyxDQUNwQyxJQUFJK3BCLEVBQWN4RCxFQUFhamYsV0FBV3hNLFFBQVEzQyxFQUFZLEtBQzlELE9BQVNoRCxFQUFLNEssS0FBT2dxQixFQUFjNTBCLEVBQUs0SyxJQUFNd21CLEVBQWVweEIsRUFBSzRLLElBQUl1SCxXQUFXeE0sUUFBUSxJQUFLM0MsR0FBYyxPQUFTaEQsRUFBSzZLLEtBQU8rcEIsRUFBYzUwQixFQUFLNkssTUFBUXVtQixFQUFlcHhCLEVBQUs2SyxJQUFJc0gsV0FBV3hNLFFBQVEsSUFBSzNDLElBRWhOLE9BQU93dUIsRUFBWUosRUFBYWpmLFdBQVczSixNQUFNLElBQUs4VixFQUFRdGUsRUFBTXUwQixHQUFhNXNCLEtBQUssS0FFMUZuRixjQUFlLFNBQXVCNmMsRUFBR3hXLEVBQVF5UixFQUFVdGEsR0FDdkQsU0FBUzYwQixFQUFZaHNCLEVBQVFpc0IsR0FDekIsSUFBSSxJQUFPOTBCLEVBQUtzeUIsZ0JBQWtCd0MsRUFBWSxDQUMxQyxJQUFJN3BCLEVBQVdoTSxFQUFFK1UsUUFBUWhVLEVBQUtnRCxXQUFZNkYsSUFDekMsSUFBTW9DLEdBQVlwQyxFQUFPdUMsT0FBT0gsRUFBVSxHQUUvQyxHQUFJLEtBQU9qTCxFQUFLa0QsZUFBZ0IsTUFBTyxLQUFPK0gsRUFBV3BDLEVBQU90RCxRQUFRdkYsRUFBS2tELGtCQUFvQjJGLEVBQU91QyxPQUFPSCxFQUFVLEdBQ3pILE9BQU9wQyxFQUVYLElBQUl5UyxFQUFReVosRUF0THhCLFNBQStCbHNCLEVBQVE3SSxHQUNuQyxJQUFJZzFCLEVBQWdCLElBQUl0dEIsT0FBTyxNQUFRLEtBQU8xSCxFQUFLbXpCLGVBQWVDLE1BQVE5ekIsRUFBVXNJLFlBQVk1SCxFQUFLbXpCLGVBQWVDLE9BQVMsSUFBTSxJQUFNOXpCLEVBQVVzSSxZQUFZNUgsRUFBS3V5QixRQUFVLFNBQVdqekIsRUFBVXNJLFlBQVk1SCxFQUFLMHlCLFNBQVcsSUFBTTF5QixFQUFLbXpCLGVBQWVFLEtBQU8vekIsRUFBVXNJLFlBQVk1SCxFQUFLbXpCLGVBQWVFLE1BQVEsSUFBTSxJQUFNLE1BQU1obkIsS0FBS3hELEVBQU9xSSxRQUFRekksVUFBVWQsS0FBSyxLQUFNc3RCLEVBQVNELEVBQWdCQSxFQUFjLEdBQUssR0FBSUQsR0FBZ0IsRUFDN2EsT0FBT0UsSUFBV0EsRUFBU0EsRUFBT3pzQixNQUFNeEksRUFBS2dELFdBQVdzSixPQUFPLElBQUksR0FBSXlvQixFQUFnQixJQUFJcnRCLE9BQU8sTUFBUTFILEVBQUtrRCxlQUFpQixNQUFNbUosS0FBSzRvQixPQUN4SUYsS0FBbUIsRUFBSUEsRUFBYyxHQUFHNXVCLFFBQVUsRUFBSTR1QixFQUFjLEdBQUc1dUIsUUFBVTR1QixFQUFjLEdBQUc1dUIsT0FBUzh1QixFQUFPOXVCLFVBQVk0dUIsRUFtTDdGRyxDQUFzQnJzQixFQUFRN0ksR0FDMUQsR0FBSSswQixFQUFlLENBQ2YsSUFBSUksRUFBTXRzQixFQUFPcUksUUFBUXpJLFVBQVcyc0IsRUFBV0QsRUFBSXh0QixLQUFLLElBQUlwQyxRQUFRd3ZCLEVBQWMsSUFDbEZJLEVBQUkvcEIsT0FBT2dxQixFQUFVTCxFQUFjLEdBQUc1dUIsUUFDdEMsSUFBSWt2QixFQUFjRixFQUFJaHZCLE9BQVNpdkIsRUFDL0JQLEVBQVlNLEdBQU03WixFQUFTLENBQ3ZCOUQsbUJBQW1CLEVBQ25CM08sT0FBUXNzQixFQUFJMXNCLFVBQ1o0UixNQUFPQyxFQUFXK2EsRUFBYy9hLEVBQVcrYSxHQUduRCxHQUFJaFcsRUFBRyxPQUFRQSxFQUFFOUIsTUFDZixJQUFLLE9BQ0wsSUFBSyxXQUNILEdBQUksT0FBU3ZkLEVBQUs0SyxJQUFLLENBQ25CLElBQUlzcEIsRUFBV2wwQixFQUFLeUMsU0FBU29HLEVBQU9xSSxRQUFRekksVUFBVWQsS0FBSyxTQUFLLEVBQVExSSxFQUFFZ0IsT0FBTyxHQUFJRCxFQUFNLENBQ3ZGdXpCLGdCQUFnQixLQUVwQixHQUFJLE9BQVN2ekIsRUFBSzRLLEtBQU9zcEIsRUFBV2wwQixFQUFLNEssSUFBSyxNQUFPLENBQ2pENE0sbUJBQW1CLEVBQ25CM08sT0FBUTJvQixFQUFZeHhCLEVBQUs0SyxJQUFJdUgsV0FBV3hNLFFBQVEsSUFBSzNGLEVBQUtnRCxZQUFZd0YsTUFBTSxJQUFLeEksRUFBS3NlLE9BQVF0ZSxHQUFNeUksV0FHNUcsR0FBSUksRUFBT0EsRUFBTzFDLE9BQVMsS0FBT25HLEVBQUttekIsZUFBZUMsTUFBTyxDQUN6RCxJQUFJa0MsRUFBWSxJQUFJNXRCLE9BQU8sTUFBUSxJQUFNMUgsRUFBS216QixlQUFlQyxNQUFROXpCLEVBQVVzSSxZQUFZNUgsRUFBS216QixlQUFlQyxPQUFTLElBQU0sSUFBTTl6QixFQUFVc0ksWUFBWTVILEVBQUt1eUIsUUFBVSxTQUFXanpCLEVBQVVzSSxZQUFZNUgsRUFBSzB5QixTQUFXLElBQU0xeUIsRUFBS216QixlQUFlRSxLQUFPL3pCLEVBQVVzSSxZQUFZNUgsRUFBS216QixlQUFlRSxNQUFRLElBQU0sSUFBTSxNQUFNaG5CLEtBQUt3b0IsRUFBWWhzQixFQUFPcUksU0FBUyxHQUFJekksVUFBVWQsS0FBSyxLQUNuWCxJQURrWTJ0QixFQUFZQSxFQUFVLEdBQUssTUFDN1loYSxFQUFTLENBQ3JCOUQsbUJBQW1CLEVBQ25CM08sT0FBUSxDQUFFLFNBRVgsS0FBTzdJLEVBQUtnRCxZQUFjNkYsRUFBTyxLQUFPN0ksRUFBS2dELGFBQWVzWSxHQUFVQSxFQUFPelMsT0FBU3lTLEVBQU96UyxPQUFPc04sU0FBV3ROLEVBQU9zTixRQUM3SG1GLEVBQVMsQ0FDTDlELG1CQUFtQixFQUNuQjNPLE9BQVFnc0IsRUFBWWhzQixNQUV4QixHQUFJN0ksRUFBS2l6QixvQkFBcUIsQ0FFMUIsSUFBSXhiLEdBREo2RCxFQUFTQSxHQUFVLEtBQ0VBLEVBQU96UyxRQUFVQSxFQUFPcUksUUFBUXpJLFVBQ3JENlMsRUFBTzlELG1CQUFvQixFQUFJOEQsRUFBT3pTLE9BQVMyb0IsRUFBWS9aLEVBQU16WCxFQUFLc2UsT0FBUXRlLEdBQU0sR0FBSXlJLFdBR2hHLE9BQU82UyxHQUVYcFosVUFBVyxTQUFtQm1kLEVBQUd4VyxFQUFReVIsRUFBVXRhLEdBQy9DLElBQXNCeVgsRUFBbEJpRyxFQUFTemUsRUFBRVMsTUFDZixHQUFJMmYsRUFBRU0sUUFBUyxPQUFRTixFQUFFN1AsU0FDdkIsS0FBS0EsRUFBUStsQixHQUNYLE9BQU83MUIsS0FBSzJHLFVBQVVpa0IsV0FBVy9uQixLQUFLN0MsS0FBTWt6QixXQUFXbHpCLEtBQUsyRyxVQUFVSyxpQkFBbUJrRyxTQUFTNU0sRUFBS3N6QixPQUN2RzVWLEVBQU92VyxRQUFRLGFBQWEsRUFFOUIsS0FBS3FJLEVBQVFnbUIsS0FDWCxPQUFPOTFCLEtBQUsyRyxVQUFVaWtCLFdBQVcvbkIsS0FBSzdDLEtBQU1rekIsV0FBV2x6QixLQUFLMkcsVUFBVUssaUJBQW1Ca0csU0FBUzVNLEVBQUtzekIsT0FDdkc1VixFQUFPdlcsUUFBUSxhQUFhLEVBRWhDLElBQUtrWSxFQUFFdUIsV0FBYXZCLEVBQUU3UCxVQUFZQSxFQUFRZ08sUUFBVTZCLEVBQUU3UCxVQUFZQSxFQUFRaU8sV0FBYTRCLEVBQUU3UCxVQUFZQSxFQUFRK1EsbUJBQXFCakcsRUFBUzNDLFFBQVU5TyxFQUFPMUMsT0FBUSxDQUNoSyxHQUFJMEMsRUFBT3dXLEVBQUU3UCxVQUFZQSxFQUFRZ08sT0FBU2xELEVBQVMzQyxNQUFRLEVBQUkyQyxFQUFTMUYsT0FBUzVVLEVBQUttekIsZUFBZUMsTUFBTyxPQUFPM2IsRUFBTzVPLEVBQU9xSSxRQUFRekksVUFDekksS0FBT3pJLEVBQUttekIsZUFBZUMsT0FBUzNiLEVBQUt0QixRQUFTLEtBQU9uVyxFQUFLbXpCLGVBQWVFLE1BQVE1YixFQUFLcE8sTUFDMUZxVSxFQUFPdlcsUUFBUSxXQUFZLENBQUVzUSxFQUFLOVAsS0FBSyxJQUFLMlMsRUFBUzNDLFNBQVUsRUFDL0QsSUFBSSxJQUFPM1gsRUFBS2lELFlBQWEsQ0FDekIsSUFBSXViLEVBQVd2ZixFQUFFK1UsUUFBUWhVLEVBQUtnRCxXQUFZNkYsR0FDMUMsR0FBSTdJLEVBQUsweEIsZ0JBQ0wsR0FBSSxJQUFNbFQsRUFBVSxPQUFPL0csRUFBTzVPLEVBQU9xSSxRQUFRekksV0FBZ0JZLE1BQU9xVSxFQUFPdlcsUUFBUSxXQUFZLENBQUVzUSxFQUFLOVAsS0FBSyxJQUFLMlMsRUFBUzNDLE9BQVNGLEVBQUt0UixPQUFTc1IsRUFBS3RSLE9BQVNtVSxFQUFTM0MsU0FDM0ssT0FDRyxJQUFLLElBQU02RyxJQUFhbEUsRUFBUzNDLE1BQVE2RyxHQUFZbEUsRUFBUzFGLElBQU00SixHQUFZYSxFQUFFN1AsVUFBWUEsRUFBUWdPLFFBQVVsRCxFQUFTM0MsUUFBVTZHLEdBQVcsT0FBT2xFLEVBQVMzQyxRQUFVMkMsRUFBUzFGLEtBQU95SyxFQUFFN1AsVUFBWUEsRUFBUWlPLFdBQWE0QixFQUFFN1AsVUFBWUEsRUFBUStRLGtCQUFvQmpHLEVBQVMzQyxTQUNyUkYsRUFBTzVPLEVBQU9xSSxRQUFRekksV0FBZ0IyQyxPQUFPcU0sRUFBS3RSLE9BQVNtVSxFQUFTM0MsTUFBTzJDLEVBQVMzQyxNQUFRMkMsRUFBUzFGLElBQU0sR0FDM0c2QyxFQUFPK1osRUFBWS9aLEVBQU16WCxFQUFLc2UsT0FBUXRlLEdBQU0ySCxLQUFLLElBQUsrVixFQUFPdlcsUUFBUSxXQUFZLENBQUVzUSxFQUFNNkMsRUFBUzNDLE9BQVNGLEVBQUt0UixPQUFTcVksRUFBVyxFQUFJbEUsRUFBUzNDLFNBQ2pKLE1BS2hCOGQsU0FBVSxDQUNObEQsT0FBUSxHQUNScnZCLGVBQWdCLElBQ2hCM0QsTUFBTyxVQUNQK2UsT0FBUSxFQUNSb1QsZ0JBQWdCLEdBRXBCZ0UsUUFBUyxDQUNMbjJCLE1BQU8sV0FFWG8yQixRQUFTLENBQ0xwMkIsTUFBTyxVQUNQK2UsT0FBUSxHQUVac1gsV0FBWSxDQUNScjJCLE1BQU8sVUFDUHFMLElBQUssRUFDTEMsSUFBSyxJQUNMNm5CLE9BQVEsS0FDUnBVLE9BQVEsRUFDUjRVLFlBQVksR0FFaEIyQyxTQUFVLENBQ050MkIsTUFBTyxVQUNQaXpCLE1BQU8sU0FBZXh5QixHQUNsQixNQUFPLElBQU1BLEVBQUtrRCxlQUFpQixZQUFjbEQsRUFBS2tELGVBQWlCLGFBRTNFQSxlQUFnQixJQUNoQkYsV0FBWSxJQUNaakMsWUFBYSxJQUNidWQsT0FBUSxFQUNSb1QsZ0JBQWdCLEtBRXBCNXpCLEVBQU9ELFFBQVV5QixHQUN0QixTQUFTeEIsRUFBUUQsRUFBU2EsR0FDekIsYUFDQSxJQWtGZ0NFLEVBbEY1QmszQixHQWtGNEJsM0IsRUFsRlFGLEVBQW9CLEtBbUYxQ0UsRUFBSW0zQixXQUFhbjNCLEVBQU0sQ0FDakNvM0IsUUFBU3AzQixHQW5GakIsU0FBU0QsRUFBUUMsR0FDYixPQUFPRCxFQUFVLG1CQUFxQkUsUUFBVSxpQkFBbUJBLE9BQU9DLFNBQVcsU0FBaUJGLEdBQ2xHLGNBQWNBLEdBQ2QsU0FBaUJBLEdBQ2pCLE9BQU9BLEdBQU8sbUJBQXFCQyxRQUFVRCxFQUFJRyxjQUFnQkYsUUFBVUQsSUFBUUMsT0FBT0csVUFBWSxnQkFBa0JKLElBQ2pIQSxHQUtmLFNBQVNxM0IsRUFBMkJDLEVBQU0zekIsR0FDdEMsT0FBUUEsR0FBUSxXQUFhNUQsRUFBUTRELElBQVMsbUJBQXFCQSxFQUV2RSxTQUFnQzJ6QixHQUM1QixRQUFJLElBQVdBLEVBQU0sTUFBTSxJQUFJQyxlQUFlLDZEQUM5QyxPQUFPRCxFQUptRUUsQ0FBdUJGLEdBQVEzekIsRUFnQjdHLFNBQVM4ekIsRUFBaUJDLEdBQ3RCLElBQUlDLEVBQVMsbUJBQXFCQyxJQUFNLElBQUlBLFNBQVEsRUFDcEQsT0FBT0gsRUFBbUIsU0FBMEJDLEdBQ2hELEdBQUksT0FBU0EsSUFzQ01qckIsRUF0Q3NCaXJCLEdBdUNyQyxJQUFNRyxTQUFTdGtCLFNBQVM1UCxLQUFLOEksR0FBSTlGLFFBQVEsa0JBdkNJLE9BQU8rd0IsRUFzQ2hFLElBQTJCanJCLEVBckNuQixHQUFJLG1CQUFxQmlyQixFQUFPLE1BQU0sSUFBSUksVUFBVSxzREFDcEQsUUFBSSxJQUFzQkgsRUFBUSxDQUM5QixHQUFJQSxFQUFPSSxJQUFJTCxHQUFRLE9BQU9DLEVBQU8xTSxJQUFJeU0sR0FDekNDLEVBQU96TSxJQUFJd00sRUFBT00sR0FFdEIsU0FBU0EsSUFDTCxPQUFPQyxFQUFXUCxFQUFPN2QsVUFBV3FlLEVBQWdCcDNCLE1BQU1YLGFBRTlELE9BQU82M0IsRUFBUTUzQixVQUFZaUgsT0FBTzh3QixPQUFPVCxFQUFNdDNCLFVBQVcsQ0FDdERELFlBQWEsQ0FDVDRILE1BQU9pd0IsRUFDUEksWUFBWSxFQUNaQyxVQUFVLEVBQ1ZqTixjQUFjLEtBRWxCa04sRUFBZ0JOLEVBQVNOLEtBQ2JBLEdBYXhCLFNBQVNPLEVBQVdNLEVBQVE1ZSxFQUFNK2QsR0FDOUIsT0FBT08sRUFaWCxXQUNJLEdBQUksb0JBQXNCTyxVQUFZQSxRQUFRQyxVQUFXLE9BQU8sRUFDaEUsR0FBSUQsUUFBUUMsVUFBVUMsS0FBTSxPQUFPLEVBQ25DLEdBQUksbUJBQXFCQyxNQUFPLE9BQU8sRUFDdkMsSUFDSSxPQUFPOUwsS0FBS3pzQixVQUFVbVQsU0FBUzVQLEtBQUs2MEIsUUFBUUMsVUFBVTVMLEtBQU0sR0FBSSxnQkFDaEUsRUFDRixNQUFPcE0sR0FDTCxPQUFPLEdBSVNtWSxHQUE2QkosUUFBUUMsVUFBWSxTQUFvQkYsRUFBUTVlLEVBQU0rZCxHQUNuRyxJQUFJcDRCLEVBQUksQ0FBRSxNQUNWQSxFQUFFOE4sS0FBSzBNLE1BQU14YSxFQUFHcWEsR0FDaEIsSUFBa0RrZixFQUFXLElBQTNDaEIsU0FBU2lCLEtBQUtoZixNQUFNeWUsRUFBUWo1QixJQUM5QyxPQUFPbzRCLEdBQVNZLEVBQWdCTyxFQUFVbkIsRUFBTXQzQixXQUFZeTRCLElBQ2xEL2UsTUFBTSxLQUFNRCxXQUs5QixTQUFTeWUsRUFBZ0JsSixFQUFHdm9CLEdBQ3hCLE9BQU95eEIsRUFBa0JqeEIsT0FBTzB4QixnQkFBa0IsU0FBeUIzSixFQUFHdm9CLEdBQzFFLE9BQU91b0IsRUFBRXRFLFVBQVlqa0IsRUFBR3VvQixJQUNUQSxFQUFHdm9CLEdBRTFCLFNBQVNxeEIsRUFBZ0I5SSxHQUNyQixPQUFPOEksRUFBa0I3d0IsT0FBTzB4QixlQUFpQjF4QixPQUFPd2pCLGVBQWlCLFNBQXlCdUUsR0FDOUYsT0FBT0EsRUFBRXRFLFdBQWF6akIsT0FBT3dqQixlQUFldUUsS0FDN0JBLEdBT3ZCLEdBQUk5dUIsU0FBUzA0QixLQUFLQyxrQkFBb0IzNEIsU0FBUzA0QixLQUFLRSxhQUFjLENBQzlELElBQUlDLEVBQW1CLFNBQVNDLEdBQzVCLFNBQVNELElBQ0wsSUFBSUUsR0FsRmhCLFNBQXlCUixFQUFVUyxHQUMvQixLQUFNVCxhQUFvQlMsR0FBYyxNQUFNLElBQUl4QixVQUFVLHFDQWtGcER5QixDQUFnQno0QixLQUFNcTRCLEdBQ3RCLElBQUlLLEdBRHFDSCxFQUFRaEMsRUFBMkJ2MkIsS0FBTW8zQixFQUFnQmlCLEdBQWtCeDFCLEtBQUs3QyxRQUM5RjI0QixvQkFBcUJDLEVBQVNMLEVBQU1ILGFBQWEsQ0FDeEVTLEtBQU0sV0FDTnpuQixFQUFRNVIsU0FBUytwQixjQUFjLFNBQ25DLElBQUssSUFBSXVQLEtBQVExbkIsRUFBTXlNLEtBQU8sT0FBUSthLEVBQU83USxZQUFZM1csR0FBUXNuQixFQUFnQm55QixPQUFPakgsVUFBVXFPLGVBQWU5SyxLQUFLNjFCLEVBQWdCSSxJQUFTMW5CLEVBQU1vWSxhQUFhLGtCQUFvQmtQLEVBQWVJLEdBQU9QLEVBQU0zeUIsYUFBYTh5QixFQUFlSSxLQUM5TyxPQUFPLElBQUkxQyxFQUFXRSxTQUFVcDFCLEtBQUtrUSxHQUFRQSxFQUFNekssVUFBVWlkLFdBQWFnVixFQUMxRUwsRUFFSixPQWpGUixTQUFtQlEsRUFBVUMsR0FDekIsR0FBSSxtQkFBcUJBLEdBQWMsT0FBU0EsRUFBWSxNQUFNLElBQUloQyxVQUFVLHNEQUNoRitCLEVBQVN6NUIsVUFBWWlILE9BQU84d0IsT0FBTzJCLEdBQWNBLEVBQVcxNUIsVUFBVyxDQUNuRUQsWUFBYSxDQUNUNEgsTUFBTzh4QixFQUNQeEIsVUFBVSxFQUNWak4sY0FBYyxLQUVsQjBPLEdBQWN4QixFQUFnQnVCLEVBQVVDLEdBeUVqQ0MsQ0FBVVosRUFDbkIxQixFQUFpQnVDLGNBRG1DYixFQVgvQixHQWF2QmMsZUFBZTc2QixPQUFPLGFBQWMrNUIsS0FFekMsU0FBU2o2QixFQUFRRCxFQUFTYSxHQUN6QixhQUNBLFNBQVNDLEVBQVFDLEdBQ2IsT0FBT0QsRUFBVSxtQkFBcUJFLFFBQVUsaUJBQW1CQSxPQUFPQyxTQUFXLFNBQWlCRixHQUNsRyxjQUFjQSxHQUNkLFNBQWlCQSxHQUNqQixPQUFPQSxHQUFPLG1CQUFxQkMsUUFBVUQsRUFBSUcsY0FBZ0JGLFFBQVVELElBQVFDLE9BQU9HLFVBQVksZ0JBQWtCSixJQUNqSEEsR0FFZixJQUFJSyxFQUFJUCxFQUFvQixHQUFJWSxFQUFZWixFQUFvQixRQUNoRSxJQUFXTyxFQUFFb00sR0FBR2hGLFlBQWNwSCxFQUFFb00sR0FBR2hGLFVBQVksU0FBU2dGLEVBQUk3TCxHQUN4RCxJQUFJczVCLEVBQVNob0IsRUFBUXBSLEtBQUssR0FDMUIsUUFBSSxJQUFXRixJQUFZQSxFQUFVLElBQUssaUJBQW1CNkwsRUFBSSxPQUFRQSxHQUN2RSxJQUFLLGdCQUNILE9BQU95RixHQUFTQSxFQUFNekssVUFBWXlLLEVBQU16SyxVQUFVSyxnQkFBa0J6SCxFQUFFNlIsR0FBT29lLE1BRS9FLElBQUssU0FDSCxPQUFPeHZCLEtBQUtxRixLQUFLLFdBQ2JyRixLQUFLMkcsV0FBYTNHLEtBQUsyRyxVQUFVQyxXQUd2QyxJQUFLLGVBQ0gsT0FBT3dLLEdBQVNBLEVBQU16SyxVQUFZeUssRUFBTXpLLFVBQVVPLGVBQWlCLEdBRXJFLElBQUssaUJBQ0gsU0FBVWtLLElBQVVBLEVBQU16SyxZQUFjeUssRUFBTXpLLFVBQVVRLGlCQUUxRCxJQUFLLGFBQ0gsT0FBUWlLLElBQVVBLEVBQU16SyxXQUFheUssRUFBTXpLLFVBQVU3QyxhQUV2RCxJQUFLLGNBQ0gsT0FBT3NOLEdBQVNBLEVBQU16SyxVQUFZeUssRUFBTXpLLFVBQVVTLG1CQUFnQixFQUVwRSxJQUFLLFdBQ0h4SCxFQUFVNEgsU0FBUzRKLEVBQU90UixHQUMxQixNQUVGLElBQUssU0FDSCxHQUFJLGlCQUFtQkEsRUFBUyxPQUFPRSxLQUFLcUYsS0FBSyxXQUM3QyxRQUFJLElBQVdyRixLQUFLMkcsVUFBVyxPQUFPM0csS0FBSzJHLFVBQVVqQixPQUFPNUYsS0FFaEUsR0FBSXNSLFFBQVMsSUFBV0EsRUFBTXpLLFVBQVcsT0FBT3lLLEVBQU16SyxVQUFVakIsT0FBTzVGLEdBQ3ZFLE1BRUYsUUFDRSxPQUFPQSxFQUFRRCxNQUFROEwsRUFBSXl0QixFQUFVLElBQUl4NUIsRUFBVUUsR0FBVUUsS0FBS3FGLEtBQUssV0FDbkUrekIsRUFBUWw0QixLQUFLbEIsWUFFZCxDQUNILEdBQUk4WSxNQUFNdFAsUUFBUW1DLEdBQUssT0FBTzdMLEVBQVFELE1BQVE4TCxFQUFJeXRCLEVBQVUsSUFBSXg1QixFQUFVRSxHQUMxRUUsS0FBS3FGLEtBQUssV0FDTit6QixFQUFRbDRCLEtBQUtsQixRQUVqQixHQUFJLFVBQVlmLEVBQVEwTSxHQUFLLE9BQU95dEIsRUFBVSxJQUFJeDVCLEVBQVUrTCxRQUFLLElBQVdBLEVBQUd6SyxXQUFRLElBQVd5SyxFQUFHOUwsTUFBUUcsS0FBS3FGLEtBQUssV0FDbkgsUUFBSSxJQUFXckYsS0FBSzJHLFVBQVcsT0FBTzNHLEtBQUsyRyxVQUFVakIsT0FBT2lHLEdBQzVEeXRCLEVBQVFsNEIsS0FBS2xCLFFBQ1pBLEtBQUtxRixLQUFLLFdBQ1grekIsRUFBUWw0QixLQUFLbEIsUUFFakIsUUFBSSxJQUFXMkwsRUFBSSxPQUFPM0wsS0FBS3FGLEtBQUssWUFDaEMrekIsRUFBVSxJQUFJeDVCLEVBQVVFLElBQWtCb0IsS0FBS2xCLFlBSTVELFNBQVM1QixFQUFRRCxFQUFTYSxHQUN6QixhQUNBLElBQUlxNkIsRUFBS3I2QixFQUFvQixHQUFJUCxFQUFTTyxFQUFvQixHQUM5RHE2QixFQUFHanhCLGdCQUFrQjNKLEdBQVVPLEVBQW9CLElBQUtaLEVBQU9ELFFBQVVrN0IsSUFDeEVDLGlCQUFtQixHQUFJdDZCLG9CQUFvQjZLLEVBQUloTCxRQUFTRyxvQkFBb0JxUSxFQUFJaXFCLGlCQUNyRnQ2QixvQkFBb0I4c0IsRUFBSSxTQUFTM3RCLEVBQVNvN0IsRUFBTTVQLEdBQzVDM3FCLG9CQUFvQnN2QixFQUFFbndCLEVBQVNvN0IsSUFBU2h6QixPQUFPOGpCLGVBQWVsc0IsRUFBU283QixFQUFNLENBQ3pFakMsWUFBWSxFQUNabk4sSUFBS1IsS0FFVjNxQixvQkFBb0J3NkIsRUFBSSxTQUFTcjdCLEdBQ2hDLG9CQUFzQmdCLFFBQVVBLE9BQU9zNkIsYUFBZWx6QixPQUFPOGpCLGVBQWVsc0IsRUFBU2dCLE9BQU9zNkIsWUFBYSxDQUNyR3h5QixNQUFPLFdBQ1BWLE9BQU84akIsZUFBZWxzQixFQUFTLGFBQWMsQ0FDN0M4SSxPQUFPLEtBRVpqSSxvQkFBb0JrZSxFQUFJLFNBQVNqVyxFQUFPNHhCLEdBQ3ZDLEdBQUksRUFBSUEsSUFBUzV4QixFQUFRakksb0JBQW9CaUksSUFBUyxFQUFJNHhCLEVBQU0sT0FBTzV4QixFQUN2RSxHQUFJLEVBQUk0eEIsR0FBUSxpQkFBbUI1eEIsR0FBU0EsR0FBU0EsRUFBTW92QixXQUFZLE9BQU9wdkIsRUFDOUUsSUFBSXl5QixFQUFLbnpCLE9BQU84d0IsT0FBTyxNQUN2QixHQUFJcjRCLG9CQUFvQnc2QixFQUFFRSxHQUFLbnpCLE9BQU84akIsZUFBZXFQLEVBQUksVUFBVyxDQUNoRXBDLFlBQVksRUFDWnJ3QixNQUFPQSxJQUNQLEVBQUk0eEIsR0FBUSxpQkFBbUI1eEIsRUFBTyxJQUFLLElBQUkweUIsS0FBTzF5QixFQUFPakksb0JBQW9COHNCLEVBQUU0TixFQUFJQyxFQUFLLFNBQVNBLEdBQ3JHLE9BQU8xeUIsRUFBTTB5QixJQUNmM0IsS0FBSyxLQUFNMkIsSUFDYixPQUFPRCxHQUNSMTZCLG9CQUFvQjQ2QixFQUFJLFNBQVN4N0IsR0FDaEMsSUFBSXVyQixFQUFTdnJCLEdBQVVBLEVBQU9pNEIsV0FBYSxXQUN2QyxPQUFPajRCLEVBQU9rNEIsU0FDZCxXQUNBLE9BQU9sNEIsR0FFWCxPQUFPWSxvQkFBb0I4c0IsRUFBRW5DLEVBQVEsSUFBS0EsR0FBU0EsR0FDcEQzcUIsb0JBQW9Cc3ZCLEVBQUksU0FBU3JFLEVBQVE0UCxHQUN4QyxPQUFPdHpCLE9BQU9qSCxVQUFVcU8sZUFBZTlLLEtBQUtvbkIsRUFBUTRQLElBQ3JENzZCLG9CQUFvQitHLEVBQUksR0FBSS9HLG9CQUFvQkEsb0JBQW9CNHVCLEVBQUksSUFDM0UsU0FBUzV1QixvQkFBb0I4NkIsR0FDekIsR0FBSVIsaUJBQWlCUSxHQUFXLE9BQU9SLGlCQUFpQlEsR0FBVTM3QixRQUNsRSxJQUFJQyxFQUFTazdCLGlCQUFpQlEsR0FBWSxDQUN0Q3A3QixFQUFHbzdCLEVBQ0hsckIsR0FBRyxFQUNIelEsUUFBUyxJQUViLE9BQU9VLFFBQVFpN0IsR0FBVWozQixLQUFLekUsRUFBT0QsUUFBU0MsRUFBUUEsRUFBT0QsUUFBU2EscUJBQ3RFWixFQUFPd1EsR0FBSSxFQUFJeFEsRUFBT0QsUUFFMUIsSUFBSVUsUUFBU3k2QiIsImZpbGUiOiJqcXVlcnkuaW5wdXRtYXNrLm1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogZGlzdC9qcXVlcnkuaW5wdXRtYXNrXG4gKiBodHRwczovL2dpdGh1Yi5jb20vUm9iaW5IZXJib3RzL0lucHV0bWFza1xuICogQ29weXJpZ2h0IChjKSAyMDEwIC0gMjAyMCBSb2JpbiBIZXJib3RzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIFZlcnNpb246IDUuMC4zXG4gKi9cbiFmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgaWYgKFwib2JqZWN0XCIgPT0gdHlwZW9mIGV4cG9ydHMgJiYgXCJvYmplY3RcIiA9PSB0eXBlb2YgbW9kdWxlKSBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcImpxdWVyeVwiKSk7IGVsc2UgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZGVmaW5lICYmIGRlZmluZS5hbWQpIGRlZmluZShbIFwianF1ZXJ5XCIgXSwgZmFjdG9yeSk7IGVsc2Uge1xuICAgICAgICB2YXIgYSA9IFwib2JqZWN0XCIgPT0gdHlwZW9mIGV4cG9ydHMgPyBmYWN0b3J5KHJlcXVpcmUoXCJqcXVlcnlcIikpIDogZmFjdG9yeShyb290LmpRdWVyeSk7XG4gICAgICAgIGZvciAodmFyIGkgaW4gYSkgKFwib2JqZWN0XCIgPT0gdHlwZW9mIGV4cG9ydHMgPyBleHBvcnRzIDogcm9vdClbaV0gPSBhW2ldO1xuICAgIH1cbn0od2luZG93LCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18zX18pIHtcbiAgICByZXR1cm4gbW9kdWxlcyA9IFsgZnVuY3Rpb24obW9kdWxlKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gSlNPTi5wYXJzZSgne1wiQkFDS1NQQUNFXCI6OCxcIkJBQ0tTUEFDRV9TQUZBUklcIjoxMjcsXCJERUxFVEVcIjo0NixcIkRPV05cIjo0MCxcIkVORFwiOjM1LFwiRU5URVJcIjoxMyxcIkVTQ0FQRVwiOjI3LFwiSE9NRVwiOjM2LFwiSU5TRVJUXCI6NDUsXCJMRUZUXCI6MzcsXCJQQUdFX0RPV05cIjozNCxcIlBBR0VfVVBcIjozMyxcIlJJR0hUXCI6MzksXCJTUEFDRVwiOjMyLFwiVEFCXCI6OSxcIlVQXCI6MzgsXCJYXCI6ODgsXCJDT05UUk9MXCI6MTd9Jyk7XG4gICAgfSwgZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgICAgICAgICAgfSA6IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICAgICAgICAgIH0sIF90eXBlb2Yob2JqKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMiksIHdpbmRvdyA9IF9fd2VicGFja19yZXF1aXJlX18oNCksIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50LCBnZW5lcmF0ZU1hc2tTZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpLmdlbmVyYXRlTWFza1NldCwgYW5hbHlzZU1hc2sgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpLmFuYWx5c2VNYXNrLCBtYXNrU2NvcGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xuICAgICAgICBmdW5jdGlvbiBJbnB1dG1hc2soYWxpYXMsIG9wdGlvbnMsIGludGVybmFsKSB7XG4gICAgICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSW5wdXRtYXNrKSkgcmV0dXJuIG5ldyBJbnB1dG1hc2soYWxpYXMsIG9wdGlvbnMsIGludGVybmFsKTtcbiAgICAgICAgICAgIHRoaXMuZWwgPSB2b2lkIDAsIHRoaXMuZXZlbnRzID0ge30sIHRoaXMubWFza3NldCA9IHZvaWQgMCwgdGhpcy5yZWZyZXNoVmFsdWUgPSAhMSwgXG4gICAgICAgICAgICAhMCAhPT0gaW50ZXJuYWwgJiYgKCQuaXNQbGFpbk9iamVjdChhbGlhcykgPyBvcHRpb25zID0gYWxpYXMgOiAob3B0aW9ucyA9IG9wdGlvbnMgfHwge30sIFxuICAgICAgICAgICAgYWxpYXMgJiYgKG9wdGlvbnMuYWxpYXMgPSBhbGlhcykpLCB0aGlzLm9wdHMgPSAkLmV4dGVuZCghMCwge30sIHRoaXMuZGVmYXVsdHMsIG9wdGlvbnMpLCBcbiAgICAgICAgICAgIHRoaXMubm9NYXNrc0NhY2hlID0gb3B0aW9ucyAmJiB2b2lkIDAgIT09IG9wdGlvbnMuZGVmaW5pdGlvbnMsIHRoaXMudXNlck9wdGlvbnMgPSBvcHRpb25zIHx8IHt9LCBcbiAgICAgICAgICAgIHJlc29sdmVBbGlhcyh0aGlzLm9wdHMuYWxpYXMsIG9wdGlvbnMsIHRoaXMub3B0cyksIHRoaXMuaXNSVEwgPSB0aGlzLm9wdHMubnVtZXJpY0lucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiByZXNvbHZlQWxpYXMoYWxpYXNTdHIsIG9wdGlvbnMsIG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBhbGlhc0RlZmluaXRpb24gPSBJbnB1dG1hc2sucHJvdG90eXBlLmFsaWFzZXNbYWxpYXNTdHJdO1xuICAgICAgICAgICAgcmV0dXJuIGFsaWFzRGVmaW5pdGlvbiA/IChhbGlhc0RlZmluaXRpb24uYWxpYXMgJiYgcmVzb2x2ZUFsaWFzKGFsaWFzRGVmaW5pdGlvbi5hbGlhcywgdm9pZCAwLCBvcHRzKSwgXG4gICAgICAgICAgICAkLmV4dGVuZCghMCwgb3B0cywgYWxpYXNEZWZpbml0aW9uKSwgJC5leHRlbmQoITAsIG9wdHMsIG9wdGlvbnMpLCAhMCkgOiAobnVsbCA9PT0gb3B0cy5tYXNrICYmIChvcHRzLm1hc2sgPSBhbGlhc1N0ciksIFxuICAgICAgICAgICAgITEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGltcG9ydEF0dHJpYnV0ZU9wdGlvbnMobnB0LCBvcHRzLCB1c2VyT3B0aW9ucywgZGF0YUF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgZnVuY3Rpb24gaW1wb3J0T3B0aW9uKG9wdGlvbiwgb3B0aW9uRGF0YSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbkRhdGEgPSB2b2lkIDAgIT09IG9wdGlvbkRhdGEgPyBvcHRpb25EYXRhIDogbnB0LmdldEF0dHJpYnV0ZShkYXRhQXR0cmlidXRlICsgXCItXCIgKyBvcHRpb24pLCBcbiAgICAgICAgICAgICAgICBudWxsICE9PSBvcHRpb25EYXRhICYmIChcInN0cmluZ1wiID09IHR5cGVvZiBvcHRpb25EYXRhICYmICgwID09PSBvcHRpb24uaW5kZXhPZihcIm9uXCIpID8gb3B0aW9uRGF0YSA9IHdpbmRvd1tvcHRpb25EYXRhXSA6IFwiZmFsc2VcIiA9PT0gb3B0aW9uRGF0YSA/IG9wdGlvbkRhdGEgPSAhMSA6IFwidHJ1ZVwiID09PSBvcHRpb25EYXRhICYmIChvcHRpb25EYXRhID0gITApKSwgXG4gICAgICAgICAgICAgICAgdXNlck9wdGlvbnNbb3B0aW9uXSA9IG9wdGlvbkRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEwID09PSBvcHRzLmltcG9ydERhdGFBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGF0dHJPcHRpb25zID0gbnB0LmdldEF0dHJpYnV0ZShkYXRhQXR0cmlidXRlKSwgb3B0aW9uLCBkYXRhb3B0aW9ucywgb3B0aW9uRGF0YSwgcDtcbiAgICAgICAgICAgICAgICBpZiAoYXR0ck9wdGlvbnMgJiYgXCJcIiAhPT0gYXR0ck9wdGlvbnMgJiYgKGF0dHJPcHRpb25zID0gYXR0ck9wdGlvbnMucmVwbGFjZSgvJy9nLCAnXCInKSwgXG4gICAgICAgICAgICAgICAgZGF0YW9wdGlvbnMgPSBKU09OLnBhcnNlKFwie1wiICsgYXR0ck9wdGlvbnMgKyBcIn1cIikpLCBkYXRhb3B0aW9ucykgZm9yIChwIGluIG9wdGlvbkRhdGEgPSB2b2lkIDAsIFxuICAgICAgICAgICAgICAgIGRhdGFvcHRpb25zKSBpZiAoXCJhbGlhc1wiID09PSBwLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uRGF0YSA9IGRhdGFvcHRpb25zW3BdO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChvcHRpb24gaW4gaW1wb3J0T3B0aW9uKFwiYWxpYXNcIiwgb3B0aW9uRGF0YSksIHVzZXJPcHRpb25zLmFsaWFzICYmIHJlc29sdmVBbGlhcyh1c2VyT3B0aW9ucy5hbGlhcywgdXNlck9wdGlvbnMsIG9wdHMpLCBcbiAgICAgICAgICAgICAgICBvcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhb3B0aW9ucykgZm9yIChwIGluIG9wdGlvbkRhdGEgPSB2b2lkIDAsIGRhdGFvcHRpb25zKSBpZiAocC50b0xvd2VyQ2FzZSgpID09PSBvcHRpb24udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uRGF0YSA9IGRhdGFvcHRpb25zW3BdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaW1wb3J0T3B0aW9uKG9wdGlvbiwgb3B0aW9uRGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICQuZXh0ZW5kKCEwLCBvcHRzLCB1c2VyT3B0aW9ucyksIFwicnRsXCIgIT09IG5wdC5kaXIgJiYgIW9wdHMucmlnaHRBbGlnbiB8fCAobnB0LnN0eWxlLnRleHRBbGlnbiA9IFwicmlnaHRcIiksIFxuICAgICAgICAgICAgXCJydGxcIiAhPT0gbnB0LmRpciAmJiAhb3B0cy5udW1lcmljSW5wdXQgfHwgKG5wdC5kaXIgPSBcImx0clwiLCBucHQucmVtb3ZlQXR0cmlidXRlKFwiZGlyXCIpLCBcbiAgICAgICAgICAgIG9wdHMuaXNSVEwgPSAhMCksIE9iamVjdC5rZXlzKHVzZXJPcHRpb25zKS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgSW5wdXRtYXNrLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgIGRhdGFBdHRyaWJ1dGU6IFwiZGF0YS1pbnB1dG1hc2tcIixcbiAgICAgICAgICAgIGRlZmF1bHRzOiB7XG4gICAgICAgICAgICAgICAgX21heFRlc3RQb3M6IDUwMCxcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJfXCIsXG4gICAgICAgICAgICAgICAgb3B0aW9uYWxtYXJrZXI6IFsgXCJbXCIsIFwiXVwiIF0sXG4gICAgICAgICAgICAgICAgcXVhbnRpZmllcm1hcmtlcjogWyBcIntcIiwgXCJ9XCIgXSxcbiAgICAgICAgICAgICAgICBncm91cG1hcmtlcjogWyBcIihcIiwgXCIpXCIgXSxcbiAgICAgICAgICAgICAgICBhbHRlcm5hdG9ybWFya2VyOiBcInxcIixcbiAgICAgICAgICAgICAgICBlc2NhcGVDaGFyOiBcIlxcXFxcIixcbiAgICAgICAgICAgICAgICBtYXNrOiBudWxsLFxuICAgICAgICAgICAgICAgIHJlZ2V4OiBudWxsLFxuICAgICAgICAgICAgICAgIG9uY29tcGxldGU6ICQubm9vcCxcbiAgICAgICAgICAgICAgICBvbmluY29tcGxldGU6ICQubm9vcCxcbiAgICAgICAgICAgICAgICBvbmNsZWFyZWQ6ICQubm9vcCxcbiAgICAgICAgICAgICAgICByZXBlYXQ6IDAsXG4gICAgICAgICAgICAgICAgZ3JlZWR5OiAhMSxcbiAgICAgICAgICAgICAgICBhdXRvVW5tYXNrOiAhMSxcbiAgICAgICAgICAgICAgICByZW1vdmVNYXNrT25TdWJtaXQ6ICExLFxuICAgICAgICAgICAgICAgIGNsZWFyTWFza09uTG9zdEZvY3VzOiAhMCxcbiAgICAgICAgICAgICAgICBpbnNlcnRNb2RlOiAhMCxcbiAgICAgICAgICAgICAgICBpbnNlcnRNb2RlVmlzdWFsOiAhMCxcbiAgICAgICAgICAgICAgICBjbGVhckluY29tcGxldGU6ICExLFxuICAgICAgICAgICAgICAgIGFsaWFzOiBudWxsLFxuICAgICAgICAgICAgICAgIG9uS2V5RG93bjogJC5ub29wLFxuICAgICAgICAgICAgICAgIG9uQmVmb3JlTWFzazogbnVsbCxcbiAgICAgICAgICAgICAgICBvbkJlZm9yZVBhc3RlOiBmdW5jdGlvbiBvbkJlZm9yZVBhc3RlKHBhc3RlZFZhbHVlLCBvcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLmlzRnVuY3Rpb24ob3B0cy5vbkJlZm9yZU1hc2spID8gb3B0cy5vbkJlZm9yZU1hc2suY2FsbCh0aGlzLCBwYXN0ZWRWYWx1ZSwgb3B0cykgOiBwYXN0ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uQmVmb3JlV3JpdGU6IG51bGwsXG4gICAgICAgICAgICAgICAgb25Vbk1hc2s6IG51bGwsXG4gICAgICAgICAgICAgICAgc2hvd01hc2tPbkZvY3VzOiAhMCxcbiAgICAgICAgICAgICAgICBzaG93TWFza09uSG92ZXI6ICEwLFxuICAgICAgICAgICAgICAgIG9uS2V5VmFsaWRhdGlvbjogJC5ub29wLFxuICAgICAgICAgICAgICAgIHNraXBPcHRpb25hbFBhcnRDaGFyYWN0ZXI6IFwiIFwiLFxuICAgICAgICAgICAgICAgIG51bWVyaWNJbnB1dDogITEsXG4gICAgICAgICAgICAgICAgcmlnaHRBbGlnbjogITEsXG4gICAgICAgICAgICAgICAgdW5kb09uRXNjYXBlOiAhMCxcbiAgICAgICAgICAgICAgICByYWRpeFBvaW50OiBcIlwiLFxuICAgICAgICAgICAgICAgIF9yYWRpeERhbmNlOiAhMSxcbiAgICAgICAgICAgICAgICBncm91cFNlcGFyYXRvcjogXCJcIixcbiAgICAgICAgICAgICAgICBrZWVwU3RhdGljOiBudWxsLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uQ2FyZXRPblRhYjogITAsXG4gICAgICAgICAgICAgICAgdGFiVGhyb3VnaDogITEsXG4gICAgICAgICAgICAgICAgc3VwcG9ydHNJbnB1dFR5cGU6IFsgXCJ0ZXh0XCIsIFwidGVsXCIsIFwidXJsXCIsIFwicGFzc3dvcmRcIiwgXCJzZWFyY2hcIiBdLFxuICAgICAgICAgICAgICAgIGlnbm9yYWJsZXM6IFsgOCwgOSwgMTksIDI3LCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQ1LCA0NiwgOTMsIDExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDAsIDIyOSBdLFxuICAgICAgICAgICAgICAgIGlzQ29tcGxldGU6IG51bGwsXG4gICAgICAgICAgICAgICAgcHJlVmFsaWRhdGlvbjogbnVsbCxcbiAgICAgICAgICAgICAgICBwb3N0VmFsaWRhdGlvbjogbnVsbCxcbiAgICAgICAgICAgICAgICBzdGF0aWNEZWZpbml0aW9uU3ltYm9sOiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgaml0TWFza2luZzogITEsXG4gICAgICAgICAgICAgICAgbnVsbGFibGU6ICEwLFxuICAgICAgICAgICAgICAgIGlucHV0RXZlbnRPbmx5OiAhMSxcbiAgICAgICAgICAgICAgICBub1ZhbHVlUGF0Y2hpbmc6ICExLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uQ2FyZXRPbkNsaWNrOiBcImx2cFwiLFxuICAgICAgICAgICAgICAgIGNhc2luZzogbnVsbCxcbiAgICAgICAgICAgICAgICBpbnB1dG1vZGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIGltcG9ydERhdGFBdHRyaWJ1dGVzOiAhMCxcbiAgICAgICAgICAgICAgICBzaGlmdFBvc2l0aW9uczogITBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWZpbml0aW9uczoge1xuICAgICAgICAgICAgICAgIDk6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBcIlswLTlcXHVmZjExLVxcdWZmMTldXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25TeW1ib2w6IFwiKlwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcjogXCJbQS1aYS16XFx1MDQxMC1cXHUwNDRmXFx1MDQwMVxcdTA0NTFcXHhjMC1cXHhmZlxceGI1XVwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uU3ltYm9sOiBcIipcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCIqXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBcIlswLTlcXHVmZjExLVxcdWZmMTlBLVphLXpcXHUwNDEwLVxcdTA0NGZcXHUwNDAxXFx1MDQ1MVxceGMwLVxceGZmXFx4YjVdXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWxpYXNlczoge30sXG4gICAgICAgICAgICBtYXNrc0NhY2hlOiB7fSxcbiAgICAgICAgICAgIG1hc2s6IGZ1bmN0aW9uIG1hc2soZWxlbXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic3RyaW5nXCIgPT0gdHlwZW9mIGVsZW1zICYmIChlbGVtcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1zKSB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGVsZW1zKSksIFxuICAgICAgICAgICAgICAgIGVsZW1zID0gZWxlbXMubm9kZU5hbWUgPyBbIGVsZW1zIF0gOiBlbGVtcywgJC5lYWNoKGVsZW1zLCBmdW5jdGlvbihuZHgsIGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzY29wZWRPcHRzID0gJC5leHRlbmQoITAsIHt9LCB0aGF0Lm9wdHMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW1wb3J0QXR0cmlidXRlT3B0aW9ucyhlbCwgc2NvcGVkT3B0cywgJC5leHRlbmQoITAsIHt9LCB0aGF0LnVzZXJPcHRpb25zKSwgdGhhdC5kYXRhQXR0cmlidXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hc2tzZXQgPSBnZW5lcmF0ZU1hc2tTZXQoc2NvcGVkT3B0cywgdGhhdC5ub01hc2tzQ2FjaGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAwICE9PSBtYXNrc2V0ICYmICh2b2lkIDAgIT09IGVsLmlucHV0bWFzayAmJiAoZWwuaW5wdXRtYXNrLm9wdHMuYXV0b1VubWFzayA9ICEwLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLmlucHV0bWFzay5yZW1vdmUoKSksIGVsLmlucHV0bWFzayA9IG5ldyBJbnB1dG1hc2sodm9pZCAwLCB2b2lkIDAsICEwKSwgZWwuaW5wdXRtYXNrLm9wdHMgPSBzY29wZWRPcHRzLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLmlucHV0bWFzay5ub01hc2tzQ2FjaGUgPSB0aGF0Lm5vTWFza3NDYWNoZSwgZWwuaW5wdXRtYXNrLnVzZXJPcHRpb25zID0gJC5leHRlbmQoITAsIHt9LCB0aGF0LnVzZXJPcHRpb25zKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICBlbC5pbnB1dG1hc2suaXNSVEwgPSBzY29wZWRPcHRzLmlzUlRMIHx8IHNjb3BlZE9wdHMubnVtZXJpY0lucHV0LCBlbC5pbnB1dG1hc2suZWwgPSBlbCwgXG4gICAgICAgICAgICAgICAgICAgICAgICBlbC5pbnB1dG1hc2subWFza3NldCA9IG1hc2tzZXQsICQuZGF0YShlbCwgXCJfaW5wdXRtYXNrX29wdHNcIiwgc2NvcGVkT3B0cyksIG1hc2tTY29wZS5jYWxsKGVsLmlucHV0bWFzaywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogXCJtYXNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLCBlbGVtcyAmJiBlbGVtc1swXSAmJiBlbGVtc1swXS5pbnB1dG1hc2sgfHwgdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcHRpb246IGZ1bmN0aW9uIG9wdGlvbihvcHRpb25zLCBub3JlbWFzaykge1xuICAgICAgICAgICAgICAgIHJldHVybiBcInN0cmluZ1wiID09IHR5cGVvZiBvcHRpb25zID8gdGhpcy5vcHRzW29wdGlvbnNdIDogXCJvYmplY3RcIiA9PT0gX3R5cGVvZihvcHRpb25zKSA/ICgkLmV4dGVuZCh0aGlzLnVzZXJPcHRpb25zLCBvcHRpb25zKSwgXG4gICAgICAgICAgICAgICAgdGhpcy5lbCAmJiAhMCAhPT0gbm9yZW1hc2sgJiYgdGhpcy5tYXNrKHRoaXMuZWwpLCB0aGlzKSA6IHZvaWQgMDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bm1hc2tlZHZhbHVlOiBmdW5jdGlvbiB1bm1hc2tlZHZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFza3NldCA9IHRoaXMubWFza3NldCB8fCBnZW5lcmF0ZU1hc2tTZXQodGhpcy5vcHRzLCB0aGlzLm5vTWFza3NDYWNoZSksIFxuICAgICAgICAgICAgICAgIG1hc2tTY29wZS5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBcInVubWFza2VkdmFsdWVcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hc2tTY29wZS5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBcInJlbW92ZVwiXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0ZW1wdHltYXNrOiBmdW5jdGlvbiBnZXRlbXB0eW1hc2soKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFza3NldCA9IHRoaXMubWFza3NldCB8fCBnZW5lcmF0ZU1hc2tTZXQodGhpcy5vcHRzLCB0aGlzLm5vTWFza3NDYWNoZSksIFxuICAgICAgICAgICAgICAgIG1hc2tTY29wZS5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBcImdldGVtcHR5bWFza1wiXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzTWFza2VkVmFsdWU6IGZ1bmN0aW9uIGhhc01hc2tlZFZhbHVlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5vcHRzLmF1dG9Vbm1hc2s7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNDb21wbGV0ZTogZnVuY3Rpb24gaXNDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXNrc2V0ID0gdGhpcy5tYXNrc2V0IHx8IGdlbmVyYXRlTWFza1NldCh0aGlzLm9wdHMsIHRoaXMubm9NYXNrc0NhY2hlKSwgXG4gICAgICAgICAgICAgICAgbWFza1Njb3BlLmNhbGwodGhpcywge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb246IFwiaXNDb21wbGV0ZVwiXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0bWV0YWRhdGE6IGZ1bmN0aW9uIGdldG1ldGFkYXRhKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hc2tzZXQgPSB0aGlzLm1hc2tzZXQgfHwgZ2VuZXJhdGVNYXNrU2V0KHRoaXMub3B0cywgdGhpcy5ub01hc2tzQ2FjaGUpLCBcbiAgICAgICAgICAgICAgICBtYXNrU2NvcGUuY2FsbCh0aGlzLCB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogXCJnZXRtZXRhZGF0YVwiXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNWYWxpZDogZnVuY3Rpb24gaXNWYWxpZCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hc2tzZXQgPSB0aGlzLm1hc2tzZXQgfHwgZ2VuZXJhdGVNYXNrU2V0KHRoaXMub3B0cywgdGhpcy5ub01hc2tzQ2FjaGUpLCBcbiAgICAgICAgICAgICAgICBtYXNrU2NvcGUuY2FsbCh0aGlzLCB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogXCJpc1ZhbGlkXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZvcm1hdDogZnVuY3Rpb24gZm9ybWF0KHZhbHVlLCBtZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hc2tzZXQgPSB0aGlzLm1hc2tzZXQgfHwgZ2VuZXJhdGVNYXNrU2V0KHRoaXMub3B0cywgdGhpcy5ub01hc2tzQ2FjaGUpLCBcbiAgICAgICAgICAgICAgICBtYXNrU2NvcGUuY2FsbCh0aGlzLCB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogXCJmb3JtYXRcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YTogbWV0YWRhdGFcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRWYWx1ZTogZnVuY3Rpb24gc2V0VmFsdWUodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsICYmICQodGhpcy5lbCkudHJpZ2dlcihcInNldHZhbHVlXCIsIFsgdmFsdWUgXSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYW5hbHlzZU1hc2s6IGFuYWx5c2VNYXNrXG4gICAgICAgIH0sIElucHV0bWFzay5leHRlbmREZWZhdWx0cyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICQuZXh0ZW5kKCEwLCBJbnB1dG1hc2sucHJvdG90eXBlLmRlZmF1bHRzLCBvcHRpb25zKTtcbiAgICAgICAgfSwgSW5wdXRtYXNrLmV4dGVuZERlZmluaXRpb25zID0gZnVuY3Rpb24oZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgJC5leHRlbmQoITAsIElucHV0bWFzay5wcm90b3R5cGUuZGVmaW5pdGlvbnMsIGRlZmluaXRpb24pO1xuICAgICAgICB9LCBJbnB1dG1hc2suZXh0ZW5kQWxpYXNlcyA9IGZ1bmN0aW9uKGFsaWFzKSB7XG4gICAgICAgICAgICAkLmV4dGVuZCghMCwgSW5wdXRtYXNrLnByb3RvdHlwZS5hbGlhc2VzLCBhbGlhcyk7XG4gICAgICAgIH0sIElucHV0bWFzay5mb3JtYXQgPSBmdW5jdGlvbih2YWx1ZSwgb3B0aW9ucywgbWV0YWRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBJbnB1dG1hc2sob3B0aW9ucykuZm9ybWF0KHZhbHVlLCBtZXRhZGF0YSk7XG4gICAgICAgIH0sIElucHV0bWFzay51bm1hc2sgPSBmdW5jdGlvbih2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIElucHV0bWFzayhvcHRpb25zKS51bm1hc2tlZHZhbHVlKHZhbHVlKTtcbiAgICAgICAgfSwgSW5wdXRtYXNrLmlzVmFsaWQgPSBmdW5jdGlvbih2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIElucHV0bWFzayhvcHRpb25zKS5pc1ZhbGlkKHZhbHVlKTtcbiAgICAgICAgfSwgSW5wdXRtYXNrLnJlbW92ZSA9IGZ1bmN0aW9uKGVsZW1zKSB7XG4gICAgICAgICAgICBcInN0cmluZ1wiID09IHR5cGVvZiBlbGVtcyAmJiAoZWxlbXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtcykgfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlbGVtcykpLCBcbiAgICAgICAgICAgIGVsZW1zID0gZWxlbXMubm9kZU5hbWUgPyBbIGVsZW1zIF0gOiBlbGVtcywgJC5lYWNoKGVsZW1zLCBmdW5jdGlvbihuZHgsIGVsKSB7XG4gICAgICAgICAgICAgICAgZWwuaW5wdXRtYXNrICYmIGVsLmlucHV0bWFzay5yZW1vdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBJbnB1dG1hc2suc2V0VmFsdWUgPSBmdW5jdGlvbihlbGVtcywgdmFsdWUpIHtcbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT0gdHlwZW9mIGVsZW1zICYmIChlbGVtcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1zKSB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGVsZW1zKSksIFxuICAgICAgICAgICAgZWxlbXMgPSBlbGVtcy5ub2RlTmFtZSA/IFsgZWxlbXMgXSA6IGVsZW1zLCAkLmVhY2goZWxlbXMsIGZ1bmN0aW9uKG5keCwgZWwpIHtcbiAgICAgICAgICAgICAgICBlbC5pbnB1dG1hc2sgPyBlbC5pbnB1dG1hc2suc2V0VmFsdWUodmFsdWUpIDogJChlbCkudHJpZ2dlcihcInNldHZhbHVlXCIsIFsgdmFsdWUgXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGVzY2FwZVJlZ2V4UmVnZXggPSBuZXcgUmVnRXhwKFwiKFxcXFxcIiArIFsgXCIvXCIsIFwiLlwiLCBcIipcIiwgXCIrXCIsIFwiP1wiLCBcInxcIiwgXCIoXCIsIFwiKVwiLCBcIltcIiwgXCJdXCIsIFwie1wiLCBcIn1cIiwgXCJcXFxcXCIsIFwiJFwiLCBcIl5cIiBdLmpvaW4oXCJ8XFxcXFwiKSArIFwiKVwiLCBcImdpbVwiKTtcbiAgICAgICAgSW5wdXRtYXNrLmVzY2FwZVJlZ2V4ID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoZXNjYXBlUmVnZXhSZWdleCwgXCJcXFxcJDFcIik7XG4gICAgICAgIH0sIElucHV0bWFzay5kZXBlbmRlbmN5TGliID0gJCwgd2luZG93LklucHV0bWFzayA9IElucHV0bWFzaywgbW9kdWxlLmV4cG9ydHMgPSBJbnB1dG1hc2s7XG4gICAgfSwgZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICB2YXIganF1ZXJ5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbiAgICAgICAgaWYgKHZvaWQgMCA9PT0ganF1ZXJ5KSB0aHJvdyBcImpRdWVyeSBub3QgbG9hZGVkIVwiO1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGpxdWVyeTtcbiAgICB9LCBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18zX187XG4gICAgfSwgZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICB2YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187XG4gICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gICAgICAgICAgICB9IDogZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICAgICAgICAgICAgfSwgX3R5cGVvZihvYmopO1xuICAgICAgICB9XG4gICAgICAgIF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2Ygd2luZG93ID8gd2luZG93IDogbmV3IChldmFsKFwicmVxdWlyZSgnanNkb20nKS5KU0RPTVwiKSkoXCJcIikud2luZG93O1xuICAgICAgICB9LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXywgZXhwb3J0cywgbW9kdWxlKSwgdm9pZCAwID09PSBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyB8fCAobW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyk7XG4gICAgfSwgZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICB2YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4gICAgICAgIGZ1bmN0aW9uIGdlbmVyYXRlTWFza1NldChvcHRzLCBub2NhY2hlKSB7XG4gICAgICAgICAgICB2YXIgbXM7XG4gICAgICAgICAgICBmdW5jdGlvbiBnZW5lcmF0ZU1hc2sobWFzaywgbWV0YWRhdGEsIG9wdHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVnZXhNYXNrID0gITEsIG1hc2tzZXREZWZpbml0aW9uLCBtYXNrZGVmS2V5O1xuICAgICAgICAgICAgICAgIGlmIChudWxsICE9PSBtYXNrICYmIFwiXCIgIT09IG1hc2sgfHwgKHJlZ2V4TWFzayA9IG51bGwgIT09IG9wdHMucmVnZXgsIG1hc2sgPSByZWdleE1hc2sgPyAobWFzayA9IG9wdHMucmVnZXgsIFxuICAgICAgICAgICAgICAgIG1hc2sucmVwbGFjZSgvXihcXF4pKC4qKShcXCQpJC8sIFwiJDJcIikpIDogKHJlZ2V4TWFzayA9ICEwLCBcIi4qXCIpKSwgMSA9PT0gbWFzay5sZW5ndGggJiYgITEgPT09IG9wdHMuZ3JlZWR5ICYmIDAgIT09IG9wdHMucmVwZWF0ICYmIChvcHRzLnBsYWNlaG9sZGVyID0gXCJcIiksIFxuICAgICAgICAgICAgICAgIDAgPCBvcHRzLnJlcGVhdCB8fCBcIipcIiA9PT0gb3B0cy5yZXBlYXQgfHwgXCIrXCIgPT09IG9wdHMucmVwZWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXBlYXRTdGFydCA9IFwiKlwiID09PSBvcHRzLnJlcGVhdCA/IDAgOiBcIitcIiA9PT0gb3B0cy5yZXBlYXQgPyAxIDogb3B0cy5yZXBlYXQ7XG4gICAgICAgICAgICAgICAgICAgIG1hc2sgPSBvcHRzLmdyb3VwbWFya2VyWzBdICsgbWFzayArIG9wdHMuZ3JvdXBtYXJrZXJbMV0gKyBvcHRzLnF1YW50aWZpZXJtYXJrZXJbMF0gKyByZXBlYXRTdGFydCArIFwiLFwiICsgb3B0cy5yZXBlYXQgKyBvcHRzLnF1YW50aWZpZXJtYXJrZXJbMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBtYXNrZGVmS2V5ID0gcmVnZXhNYXNrID8gXCJyZWdleF9cIiArIG9wdHMucmVnZXggOiBvcHRzLm51bWVyaWNJbnB1dCA/IG1hc2suc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIikgOiBtYXNrLCBcbiAgICAgICAgICAgICAgICAhMSAhPT0gb3B0cy5rZWVwU3RhdGljICYmIChtYXNrZGVmS2V5ID0gXCJrc19cIiArIG1hc2tkZWZLZXkpLCB2b2lkIDAgPT09IElucHV0bWFzay5wcm90b3R5cGUubWFza3NDYWNoZVttYXNrZGVmS2V5XSB8fCAhMCA9PT0gbm9jYWNoZSA/IChtYXNrc2V0RGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgbWFzazogbWFzayxcbiAgICAgICAgICAgICAgICAgICAgbWFza1Rva2VuOiBJbnB1dG1hc2sucHJvdG90eXBlLmFuYWx5c2VNYXNrKG1hc2ssIHJlZ2V4TWFzaywgb3B0cyksXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkUG9zaXRpb25zOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgX2J1ZmZlcjogdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgICBidWZmZXI6IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICAgdGVzdHM6IHt9LFxuICAgICAgICAgICAgICAgICAgICBleGNsdWRlczoge30sXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgbWFza0xlbmd0aDogdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgICBqaXRPZmZzZXQ6IHt9XG4gICAgICAgICAgICAgICAgfSwgITAgIT09IG5vY2FjaGUgJiYgKElucHV0bWFzay5wcm90b3R5cGUubWFza3NDYWNoZVttYXNrZGVmS2V5XSA9IG1hc2tzZXREZWZpbml0aW9uLCBcbiAgICAgICAgICAgICAgICBtYXNrc2V0RGVmaW5pdGlvbiA9ICQuZXh0ZW5kKCEwLCB7fSwgSW5wdXRtYXNrLnByb3RvdHlwZS5tYXNrc0NhY2hlW21hc2tkZWZLZXldKSkpIDogbWFza3NldERlZmluaXRpb24gPSAkLmV4dGVuZCghMCwge30sIElucHV0bWFzay5wcm90b3R5cGUubWFza3NDYWNoZVttYXNrZGVmS2V5XSksIFxuICAgICAgICAgICAgICAgIG1hc2tzZXREZWZpbml0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCQuaXNGdW5jdGlvbihvcHRzLm1hc2spICYmIChvcHRzLm1hc2sgPSBvcHRzLm1hc2sob3B0cykpLCAkLmlzQXJyYXkob3B0cy5tYXNrKSkge1xuICAgICAgICAgICAgICAgIGlmICgxIDwgb3B0cy5tYXNrLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBudWxsID09PSBvcHRzLmtlZXBTdGF0aWMgJiYgKG9wdHMua2VlcFN0YXRpYyA9ICEwKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFsdE1hc2sgPSBvcHRzLmdyb3VwbWFya2VyWzBdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5lYWNoKG9wdHMuaXNSVEwgPyBvcHRzLm1hc2sucmV2ZXJzZSgpIDogb3B0cy5tYXNrLCBmdW5jdGlvbihuZHgsIG1zaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgMSA8IGFsdE1hc2subGVuZ3RoICYmIChhbHRNYXNrICs9IG9wdHMuZ3JvdXBtYXJrZXJbMV0gKyBvcHRzLmFsdGVybmF0b3JtYXJrZXIgKyBvcHRzLmdyb3VwbWFya2VyWzBdKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICB2b2lkIDAgPT09IG1zay5tYXNrIHx8ICQuaXNGdW5jdGlvbihtc2subWFzaykgPyBhbHRNYXNrICs9IG1zayA6IGFsdE1hc2sgKz0gbXNrLm1hc2s7XG4gICAgICAgICAgICAgICAgICAgIH0pLCBhbHRNYXNrICs9IG9wdHMuZ3JvdXBtYXJrZXJbMV0sIGdlbmVyYXRlTWFzayhhbHRNYXNrLCBvcHRzLm1hc2ssIG9wdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcHRzLm1hc2sgPSBvcHRzLm1hc2sucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbCA9PT0gb3B0cy5rZWVwU3RhdGljICYmIChvcHRzLmtlZXBTdGF0aWMgPSAhMSksIG1zID0gb3B0cy5tYXNrICYmIHZvaWQgMCAhPT0gb3B0cy5tYXNrLm1hc2sgJiYgISQuaXNGdW5jdGlvbihvcHRzLm1hc2subWFzaykgPyBnZW5lcmF0ZU1hc2sob3B0cy5tYXNrLm1hc2ssIG9wdHMubWFzaywgb3B0cykgOiBnZW5lcmF0ZU1hc2sob3B0cy5tYXNrLCBvcHRzLm1hc2ssIG9wdHMpLCBcbiAgICAgICAgICAgIG1zO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFuYWx5c2VNYXNrKG1hc2ssIHJlZ2V4TWFzaywgb3B0cykge1xuICAgICAgICAgICAgdmFyIHRva2VuaXplciA9IC8oPzpbPyorXXxcXHtbMC05KypdKyg/OixbMC05KypdKik/KD86XFx8WzAtOSsqXSopP1xcfSl8W14uPyorXiR7W10oKXxcXFxcXSt8Li9nLCByZWdleFRva2VuaXplciA9IC9cXFtcXF4/XT8oPzpbXlxcXFxcXF1dK3xcXFxcW1xcU1xcc10/KSpdP3xcXFxcKD86MCg/OlswLTNdWzAtN117MCwyfXxbNC03XVswLTddPyk/fFsxLTldWzAtOV0qfHhbMC05QS1GYS1mXXsyfXx1WzAtOUEtRmEtZl17NH18Y1tBLVphLXpdfFtcXFNcXHNdPyl8XFwoKD86XFw/Wzo9IV0/KT98KD86Wz8qK118XFx7WzAtOV0rKD86LFswLTldKik/XFx9KVxcPz98W14uPyorXiR7WygpfFxcXFxdK3wuL2csIGVzY2FwZWQgPSAhMSwgY3VycmVudFRva2VuID0gbmV3IE1hc2tUb2tlbigpLCBtYXRjaCwgbSwgb3BlbmVuaW5ncyA9IFtdLCBtYXNrVG9rZW5zID0gW10sIG9wZW5pbmdUb2tlbiwgY3VycmVudE9wZW5pbmdUb2tlbiwgYWx0ZXJuYXRvciwgbGFzdE1hdGNoLCBjbG9zZVJlZ2V4R3JvdXAgPSAhMTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIE1hc2tUb2tlbihpc0dyb3VwLCBpc09wdGlvbmFsLCBpc1F1YW50aWZpZXIsIGlzQWx0ZXJuYXRvcikge1xuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlcyA9IFtdLCB0aGlzLm9wZW5Hcm91cCA9IGlzR3JvdXAgfHwgITEsIHRoaXMuYWx0ZXJuYXRvckdyb3VwID0gITEsIHRoaXMuaXNHcm91cCA9IGlzR3JvdXAgfHwgITEsIFxuICAgICAgICAgICAgICAgIHRoaXMuaXNPcHRpb25hbCA9IGlzT3B0aW9uYWwgfHwgITEsIHRoaXMuaXNRdWFudGlmaWVyID0gaXNRdWFudGlmaWVyIHx8ICExLCB0aGlzLmlzQWx0ZXJuYXRvciA9IGlzQWx0ZXJuYXRvciB8fCAhMSwgXG4gICAgICAgICAgICAgICAgdGhpcy5xdWFudGlmaWVyID0ge1xuICAgICAgICAgICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICAgICAgICAgIG1heDogMVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpbnNlcnRUZXN0RGVmaW5pdGlvbihtdG9rZW4sIGVsZW1lbnQsIHBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb24gPSB2b2lkIDAgIT09IHBvc2l0aW9uID8gcG9zaXRpb24gOiBtdG9rZW4ubWF0Y2hlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdmFyIHByZXZNYXRjaCA9IG10b2tlbi5tYXRjaGVzW3Bvc2l0aW9uIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKHJlZ2V4TWFzaykgMCA9PT0gZWxlbWVudC5pbmRleE9mKFwiW1wiKSB8fCBlc2NhcGVkICYmIC9cXFxcZHxcXFxcc3xcXFxcd10vaS50ZXN0KGVsZW1lbnQpIHx8IFwiLlwiID09PSBlbGVtZW50ID8gbXRva2VuLm1hdGNoZXMuc3BsaWNlKHBvc2l0aW9uKyssIDAsIHtcbiAgICAgICAgICAgICAgICAgICAgZm46IG5ldyBSZWdFeHAoZWxlbWVudCwgb3B0cy5jYXNpbmcgPyBcImlcIiA6IFwiXCIpLFxuICAgICAgICAgICAgICAgICAgICBzdGF0aWM6ICExLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25hbGl0eTogITEsXG4gICAgICAgICAgICAgICAgICAgIG5ld0Jsb2NrTWFya2VyOiB2b2lkIDAgPT09IHByZXZNYXRjaCA/IFwibWFzdGVyXCIgOiBwcmV2TWF0Y2guZGVmICE9PSBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBjYXNpbmc6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRlZjogZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICAgbmF0aXZlRGVmOiBlbGVtZW50XG4gICAgICAgICAgICAgICAgfSkgOiAoZXNjYXBlZCAmJiAoZWxlbWVudCA9IGVsZW1lbnRbZWxlbWVudC5sZW5ndGggLSAxXSksICQuZWFjaChlbGVtZW50LnNwbGl0KFwiXCIpLCBmdW5jdGlvbihuZHgsIGxtbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldk1hdGNoID0gbXRva2VuLm1hdGNoZXNbcG9zaXRpb24gLSAxXSwgbXRva2VuLm1hdGNoZXMuc3BsaWNlKHBvc2l0aW9uKyssIDAsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuOiAvW2Etel0vaS50ZXN0KG9wdHMuc3RhdGljRGVmaW5pdGlvblN5bWJvbCB8fCBsbW50KSA/IG5ldyBSZWdFeHAoXCJbXCIgKyAob3B0cy5zdGF0aWNEZWZpbml0aW9uU3ltYm9sIHx8IGxtbnQpICsgXCJdXCIsIG9wdHMuY2FzaW5nID8gXCJpXCIgOiBcIlwiKSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWM6ICEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxpdHk6ICExLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3QmxvY2tNYXJrZXI6IHZvaWQgMCA9PT0gcHJldk1hdGNoID8gXCJtYXN0ZXJcIiA6IHByZXZNYXRjaC5kZWYgIT09IGxtbnQgJiYgITAgIT09IHByZXZNYXRjaC5zdGF0aWMsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbmc6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWY6IG9wdHMuc3RhdGljRGVmaW5pdGlvblN5bWJvbCB8fCBsbW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHZvaWQgMCAhPT0gb3B0cy5zdGF0aWNEZWZpbml0aW9uU3ltYm9sID8gbG1udCA6IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZURlZjogKGVzY2FwZWQgPyBcIidcIiA6IFwiXCIpICsgbG1udFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KSksIGVzY2FwZWQgPSAhMTsgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXNrZGVmID0gKG9wdHMuZGVmaW5pdGlvbnMgPyBvcHRzLmRlZmluaXRpb25zW2VsZW1lbnRdIDogdm9pZCAwKSB8fCBJbnB1dG1hc2sucHJvdG90eXBlLmRlZmluaXRpb25zW2VsZW1lbnRdO1xuICAgICAgICAgICAgICAgICAgICBtYXNrZGVmICYmICFlc2NhcGVkID8gbXRva2VuLm1hdGNoZXMuc3BsaWNlKHBvc2l0aW9uKyssIDAsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuOiBtYXNrZGVmLnZhbGlkYXRvciA/IFwic3RyaW5nXCIgPT0gdHlwZW9mIG1hc2tkZWYudmFsaWRhdG9yID8gbmV3IFJlZ0V4cChtYXNrZGVmLnZhbGlkYXRvciwgb3B0cy5jYXNpbmcgPyBcImlcIiA6IFwiXCIpIDogbmV3IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGVzdCA9IG1hc2tkZWYudmFsaWRhdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSgpIDogbmV3IFJlZ0V4cChcIi5cIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWM6IG1hc2tkZWYuc3RhdGljIHx8ICExLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxpdHk6ICExLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3QmxvY2tNYXJrZXI6IHZvaWQgMCA9PT0gcHJldk1hdGNoID8gXCJtYXN0ZXJcIiA6IHByZXZNYXRjaC5kZWYgIT09IChtYXNrZGVmLmRlZmluaXRpb25TeW1ib2wgfHwgZWxlbWVudCksXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbmc6IG1hc2tkZWYuY2FzaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmOiBtYXNrZGVmLmRlZmluaXRpb25TeW1ib2wgfHwgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBtYXNrZGVmLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlRGVmOiBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkOiBtYXNrZGVmLmdlbmVyYXRlZFxuICAgICAgICAgICAgICAgICAgICB9KSA6IChtdG9rZW4ubWF0Y2hlcy5zcGxpY2UocG9zaXRpb24rKywgMCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm46IC9bYS16XS9pLnRlc3Qob3B0cy5zdGF0aWNEZWZpbml0aW9uU3ltYm9sIHx8IGVsZW1lbnQpID8gbmV3IFJlZ0V4cChcIltcIiArIChvcHRzLnN0YXRpY0RlZmluaXRpb25TeW1ib2wgfHwgZWxlbWVudCkgKyBcIl1cIiwgb3B0cy5jYXNpbmcgPyBcImlcIiA6IFwiXCIpIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYzogITAsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbGl0eTogITEsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdCbG9ja01hcmtlcjogdm9pZCAwID09PSBwcmV2TWF0Y2ggPyBcIm1hc3RlclwiIDogcHJldk1hdGNoLmRlZiAhPT0gZWxlbWVudCAmJiAhMCAhPT0gcHJldk1hdGNoLnN0YXRpYyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2luZzogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZjogb3B0cy5zdGF0aWNEZWZpbml0aW9uU3ltYm9sIHx8IGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogdm9pZCAwICE9PSBvcHRzLnN0YXRpY0RlZmluaXRpb25TeW1ib2wgPyBlbGVtZW50IDogdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlRGVmOiAoZXNjYXBlZCA/IFwiJ1wiIDogXCJcIikgKyBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIH0pLCBlc2NhcGVkID0gITEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHZlcmlmeUdyb3VwTWFya2VyKG1hc2tUb2tlbikge1xuICAgICAgICAgICAgICAgIG1hc2tUb2tlbiAmJiBtYXNrVG9rZW4ubWF0Y2hlcyAmJiAkLmVhY2gobWFza1Rva2VuLm1hdGNoZXMsIGZ1bmN0aW9uKG5keCwgdG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRUb2tlbiA9IG1hc2tUb2tlbi5tYXRjaGVzW25keCArIDFdO1xuICAgICAgICAgICAgICAgICAgICAodm9pZCAwID09PSBuZXh0VG9rZW4gfHwgdm9pZCAwID09PSBuZXh0VG9rZW4ubWF0Y2hlcyB8fCAhMSA9PT0gbmV4dFRva2VuLmlzUXVhbnRpZmllcikgJiYgdG9rZW4gJiYgdG9rZW4uaXNHcm91cCAmJiAodG9rZW4uaXNHcm91cCA9ICExLCBcbiAgICAgICAgICAgICAgICAgICAgcmVnZXhNYXNrIHx8IChpbnNlcnRUZXN0RGVmaW5pdGlvbih0b2tlbiwgb3B0cy5ncm91cG1hcmtlclswXSwgMCksICEwICE9PSB0b2tlbi5vcGVuR3JvdXAgJiYgaW5zZXJ0VGVzdERlZmluaXRpb24odG9rZW4sIG9wdHMuZ3JvdXBtYXJrZXJbMV0pKSksIFxuICAgICAgICAgICAgICAgICAgICB2ZXJpZnlHcm91cE1hcmtlcih0b2tlbik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0Q2FzZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoMCA8IG9wZW5lbmluZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50T3BlbmluZ1Rva2VuID0gb3BlbmVuaW5nc1tvcGVuZW5pbmdzLmxlbmd0aCAtIDFdLCBpbnNlcnRUZXN0RGVmaW5pdGlvbihjdXJyZW50T3BlbmluZ1Rva2VuLCBtKSwgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPcGVuaW5nVG9rZW4uaXNBbHRlcm5hdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdG9yID0gb3BlbmVuaW5ncy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG1uZHggPSAwOyBtbmR4IDwgYWx0ZXJuYXRvci5tYXRjaGVzLmxlbmd0aDsgbW5keCsrKSBhbHRlcm5hdG9yLm1hdGNoZXNbbW5keF0uaXNHcm91cCAmJiAoYWx0ZXJuYXRvci5tYXRjaGVzW21uZHhdLmlzR3JvdXAgPSAhMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAwIDwgb3BlbmVuaW5ncy5sZW5ndGggPyAoY3VycmVudE9wZW5pbmdUb2tlbiA9IG9wZW5lbmluZ3Nbb3BlbmVuaW5ncy5sZW5ndGggLSAxXSwgXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50T3BlbmluZ1Rva2VuLm1hdGNoZXMucHVzaChhbHRlcm5hdG9yKSkgOiBjdXJyZW50VG9rZW4ubWF0Y2hlcy5wdXNoKGFsdGVybmF0b3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGluc2VydFRlc3REZWZpbml0aW9uKGN1cnJlbnRUb2tlbiwgbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZXZlcnNlVG9rZW5zKG1hc2tUb2tlbikge1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJldmVyc2VTdGF0aWMoc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ID09PSBvcHRzLm9wdGlvbmFsbWFya2VyWzBdID8gc3QgPSBvcHRzLm9wdGlvbmFsbWFya2VyWzFdIDogc3QgPT09IG9wdHMub3B0aW9uYWxtYXJrZXJbMV0gPyBzdCA9IG9wdHMub3B0aW9uYWxtYXJrZXJbMF0gOiBzdCA9PT0gb3B0cy5ncm91cG1hcmtlclswXSA/IHN0ID0gb3B0cy5ncm91cG1hcmtlclsxXSA6IHN0ID09PSBvcHRzLmdyb3VwbWFya2VyWzFdICYmIChzdCA9IG9wdHMuZ3JvdXBtYXJrZXJbMF0pLCBcbiAgICAgICAgICAgICAgICAgICAgc3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAodmFyIG1hdGNoIGluIG1hc2tUb2tlbi5tYXRjaGVzID0gbWFza1Rva2VuLm1hdGNoZXMucmV2ZXJzZSgpLCBtYXNrVG9rZW4ubWF0Y2hlcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtYXNrVG9rZW4ubWF0Y2hlcywgbWF0Y2gpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbnRNYXRjaCA9IHBhcnNlSW50KG1hdGNoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hc2tUb2tlbi5tYXRjaGVzW21hdGNoXS5pc1F1YW50aWZpZXIgJiYgbWFza1Rva2VuLm1hdGNoZXNbaW50TWF0Y2ggKyAxXSAmJiBtYXNrVG9rZW4ubWF0Y2hlc1tpbnRNYXRjaCArIDFdLmlzR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdCA9IG1hc2tUb2tlbi5tYXRjaGVzW21hdGNoXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tUb2tlbi5tYXRjaGVzLnNwbGljZShtYXRjaCwgMSksIG1hc2tUb2tlbi5tYXRjaGVzLnNwbGljZShpbnRNYXRjaCArIDEsIDAsIHF0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2b2lkIDAgIT09IG1hc2tUb2tlbi5tYXRjaGVzW21hdGNoXS5tYXRjaGVzID8gbWFza1Rva2VuLm1hdGNoZXNbbWF0Y2hdID0gcmV2ZXJzZVRva2VucyhtYXNrVG9rZW4ubWF0Y2hlc1ttYXRjaF0pIDogbWFza1Rva2VuLm1hdGNoZXNbbWF0Y2hdID0gcmV2ZXJzZVN0YXRpYyhtYXNrVG9rZW4ubWF0Y2hlc1ttYXRjaF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbWFza1Rva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZ3JvdXBpZnkobWF0Y2hlcykge1xuICAgICAgICAgICAgICAgIHZhciBncm91cFRva2VuID0gbmV3IE1hc2tUb2tlbighMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyb3VwVG9rZW4ub3Blbkdyb3VwID0gITEsIGdyb3VwVG9rZW4ubWF0Y2hlcyA9IG1hdGNoZXMsIGdyb3VwVG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjbG9zZUdyb3VwKCkge1xuICAgICAgICAgICAgICAgIGlmIChvcGVuaW5nVG9rZW4gPSBvcGVuZW5pbmdzLnBvcCgpLCBvcGVuaW5nVG9rZW4ub3Blbkdyb3VwID0gITEsIHZvaWQgMCAhPT0gb3BlbmluZ1Rva2VuKSBpZiAoMCA8IG9wZW5lbmluZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50T3BlbmluZ1Rva2VuID0gb3BlbmVuaW5nc1tvcGVuZW5pbmdzLmxlbmd0aCAtIDFdLCBjdXJyZW50T3BlbmluZ1Rva2VuLm1hdGNoZXMucHVzaChvcGVuaW5nVG9rZW4pLCBcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE9wZW5pbmdUb2tlbi5pc0FsdGVybmF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVybmF0b3IgPSBvcGVuZW5pbmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbW5keCA9IDA7IG1uZHggPCBhbHRlcm5hdG9yLm1hdGNoZXMubGVuZ3RoOyBtbmR4KyspIGFsdGVybmF0b3IubWF0Y2hlc1ttbmR4XS5pc0dyb3VwID0gITEsIFxuICAgICAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRvci5tYXRjaGVzW21uZHhdLmFsdGVybmF0b3JHcm91cCA9ICExO1xuICAgICAgICAgICAgICAgICAgICAgICAgMCA8IG9wZW5lbmluZ3MubGVuZ3RoID8gKGN1cnJlbnRPcGVuaW5nVG9rZW4gPSBvcGVuZW5pbmdzW29wZW5lbmluZ3MubGVuZ3RoIC0gMV0sIFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE9wZW5pbmdUb2tlbi5tYXRjaGVzLnB1c2goYWx0ZXJuYXRvcikpIDogY3VycmVudFRva2VuLm1hdGNoZXMucHVzaChhbHRlcm5hdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBjdXJyZW50VG9rZW4ubWF0Y2hlcy5wdXNoKG9wZW5pbmdUb2tlbik7IGVsc2UgZGVmYXVsdENhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdyb3VwUXVhbnRpZmllcihtYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhc3RNYXRjaCA9IG1hdGNoZXMucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RNYXRjaC5pc1F1YW50aWZpZXIgJiYgKGxhc3RNYXRjaCA9IGdyb3VwaWZ5KFsgbWF0Y2hlcy5wb3AoKSwgbGFzdE1hdGNoIF0pKSwgXG4gICAgICAgICAgICAgICAgbGFzdE1hdGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChyZWdleE1hc2sgJiYgKG9wdHMub3B0aW9uYWxtYXJrZXJbMF0gPSB2b2lkIDAsIG9wdHMub3B0aW9uYWxtYXJrZXJbMV0gPSB2b2lkIDApOyBtYXRjaCA9IHJlZ2V4TWFzayA/IHJlZ2V4VG9rZW5pemVyLmV4ZWMobWFzaykgOiB0b2tlbml6ZXIuZXhlYyhtYXNrKTsgKSB7XG4gICAgICAgICAgICAgICAgaWYgKG0gPSBtYXRjaFswXSwgcmVnZXhNYXNrKSBzd2l0Y2ggKG0uY2hhckF0KDApKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiP1wiOlxuICAgICAgICAgICAgICAgICAgICBtID0gXCJ7MCwxfVwiO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgY2FzZSBcIitcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCIqXCI6XG4gICAgICAgICAgICAgICAgICAgIG0gPSBcIntcIiArIG0gKyBcIn1cIjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJ8XCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBvcGVuZW5pbmdzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFsdFJlZ2V4R3JvdXAgPSBncm91cGlmeShjdXJyZW50VG9rZW4ubWF0Y2hlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbHRSZWdleEdyb3VwLm9wZW5Hcm91cCA9ICEwLCBvcGVuZW5pbmdzLnB1c2goYWx0UmVnZXhHcm91cCksIGN1cnJlbnRUb2tlbi5tYXRjaGVzID0gW10sIFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VSZWdleEdyb3VwID0gITA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlc2NhcGVkKSBkZWZhdWx0Q2FzZSgpOyBlbHNlIHN3aXRjaCAobS5jaGFyQXQoMCkpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCIoPz1cIjpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGNhc2UgXCIoPyFcIjpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGNhc2UgXCIoPzw9XCI6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBjYXNlIFwiKD88IVwiOlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgY2FzZSBvcHRzLmVzY2FwZUNoYXI6XG4gICAgICAgICAgICAgICAgICAgIGVzY2FwZWQgPSAhMCwgcmVnZXhNYXNrICYmIGRlZmF1bHRDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBjYXNlIG9wdHMub3B0aW9uYWxtYXJrZXJbMV06XG4gICAgICAgICAgICAgICAgICBjYXNlIG9wdHMuZ3JvdXBtYXJrZXJbMV06XG4gICAgICAgICAgICAgICAgICAgIGNsb3NlR3JvdXAoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGNhc2Ugb3B0cy5vcHRpb25hbG1hcmtlclswXTpcbiAgICAgICAgICAgICAgICAgICAgb3BlbmVuaW5ncy5wdXNoKG5ldyBNYXNrVG9rZW4oITEsICEwKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBjYXNlIG9wdHMuZ3JvdXBtYXJrZXJbMF06XG4gICAgICAgICAgICAgICAgICAgIG9wZW5lbmluZ3MucHVzaChuZXcgTWFza1Rva2VuKCEwKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBjYXNlIG9wdHMucXVhbnRpZmllcm1hcmtlclswXTpcbiAgICAgICAgICAgICAgICAgICAgdmFyIHF1YW50aWZpZXIgPSBuZXcgTWFza1Rva2VuKCExLCAhMSwgITApO1xuICAgICAgICAgICAgICAgICAgICBtID0gbS5yZXBsYWNlKC9be31dL2csIFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbXFqID0gbS5zcGxpdChcInxcIiksIG1xID0gbXFqWzBdLnNwbGl0KFwiLFwiKSwgbXEwID0gaXNOYU4obXFbMF0pID8gbXFbMF0gOiBwYXJzZUludChtcVswXSksIG1xMSA9IDEgPT09IG1xLmxlbmd0aCA/IG1xMCA6IGlzTmFOKG1xWzFdKSA/IG1xWzFdIDogcGFyc2VJbnQobXFbMV0pO1xuICAgICAgICAgICAgICAgICAgICBcIipcIiAhPT0gbXEwICYmIFwiK1wiICE9PSBtcTAgfHwgKG1xMCA9IFwiKlwiID09PSBtcTEgPyAwIDogMSksIHF1YW50aWZpZXIucXVhbnRpZmllciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogbXEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4OiBtcTEsXG4gICAgICAgICAgICAgICAgICAgICAgICBqaXQ6IG1xalsxXVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IDAgPCBvcGVuZW5pbmdzLmxlbmd0aCA/IG9wZW5lbmluZ3Nbb3BlbmVuaW5ncy5sZW5ndGggLSAxXS5tYXRjaGVzIDogY3VycmVudFRva2VuLm1hdGNoZXM7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IG1hdGNoZXMucG9wKCksIG1hdGNoLmlzQWx0ZXJuYXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKG1hdGNoKSwgbWF0Y2hlcyA9IG1hdGNoLm1hdGNoZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JvdXBUb2tlbiA9IG5ldyBNYXNrVG9rZW4oITApLCB0bXBNYXRjaCA9IG1hdGNoZXMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLnB1c2goZ3JvdXBUb2tlbiksIG1hdGNoZXMgPSBncm91cFRva2VuLm1hdGNoZXMsIG1hdGNoID0gdG1wTWF0Y2g7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbWF0Y2guaXNHcm91cCB8fCAobWF0Y2ggPSBncm91cGlmeShbIG1hdGNoIF0pKSwgbWF0Y2hlcy5wdXNoKG1hdGNoKSwgbWF0Y2hlcy5wdXNoKHF1YW50aWZpZXIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgY2FzZSBvcHRzLmFsdGVybmF0b3JtYXJrZXI6XG4gICAgICAgICAgICAgICAgICAgIGlmICgwIDwgb3BlbmVuaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPcGVuaW5nVG9rZW4gPSBvcGVuZW5pbmdzW29wZW5lbmluZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ViVG9rZW4gPSBjdXJyZW50T3BlbmluZ1Rva2VuLm1hdGNoZXNbY3VycmVudE9wZW5pbmdUb2tlbi5tYXRjaGVzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE1hdGNoID0gY3VycmVudE9wZW5pbmdUb2tlbi5vcGVuR3JvdXAgJiYgKHZvaWQgMCA9PT0gc3ViVG9rZW4ubWF0Y2hlcyB8fCAhMSA9PT0gc3ViVG9rZW4uaXNHcm91cCAmJiAhMSA9PT0gc3ViVG9rZW4uaXNBbHRlcm5hdG9yKSA/IG9wZW5lbmluZ3MucG9wKCkgOiBncm91cFF1YW50aWZpZXIoY3VycmVudE9wZW5pbmdUb2tlbi5tYXRjaGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGxhc3RNYXRjaCA9IGdyb3VwUXVhbnRpZmllcihjdXJyZW50VG9rZW4ubWF0Y2hlcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0TWF0Y2guaXNBbHRlcm5hdG9yKSBvcGVuZW5pbmdzLnB1c2gobGFzdE1hdGNoKTsgZWxzZSBpZiAobGFzdE1hdGNoLmFsdGVybmF0b3JHcm91cCA/IChhbHRlcm5hdG9yID0gb3BlbmVuaW5ncy5wb3AoKSwgXG4gICAgICAgICAgICAgICAgICAgIGxhc3RNYXRjaC5hbHRlcm5hdG9yR3JvdXAgPSAhMSkgOiBhbHRlcm5hdG9yID0gbmV3IE1hc2tUb2tlbighMSwgITEsICExLCAhMCksIGFsdGVybmF0b3IubWF0Y2hlcy5wdXNoKGxhc3RNYXRjaCksIFxuICAgICAgICAgICAgICAgICAgICBvcGVuZW5pbmdzLnB1c2goYWx0ZXJuYXRvciksIGxhc3RNYXRjaC5vcGVuR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RNYXRjaC5vcGVuR3JvdXAgPSAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbHRlcm5hdG9yR3JvdXAgPSBuZXcgTWFza1Rva2VuKCEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVybmF0b3JHcm91cC5hbHRlcm5hdG9yR3JvdXAgPSAhMCwgb3BlbmVuaW5ncy5wdXNoKGFsdGVybmF0b3JHcm91cCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDYXNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjbG9zZVJlZ2V4R3JvdXAgJiYgY2xvc2VHcm91cCgpOyAwIDwgb3BlbmVuaW5ncy5sZW5ndGg7ICkgb3BlbmluZ1Rva2VuID0gb3BlbmVuaW5ncy5wb3AoKSwgXG4gICAgICAgICAgICBjdXJyZW50VG9rZW4ubWF0Y2hlcy5wdXNoKG9wZW5pbmdUb2tlbik7XG4gICAgICAgICAgICByZXR1cm4gMCA8IGN1cnJlbnRUb2tlbi5tYXRjaGVzLmxlbmd0aCAmJiAodmVyaWZ5R3JvdXBNYXJrZXIoY3VycmVudFRva2VuKSwgbWFza1Rva2Vucy5wdXNoKGN1cnJlbnRUb2tlbikpLCBcbiAgICAgICAgICAgIChvcHRzLm51bWVyaWNJbnB1dCB8fCBvcHRzLmlzUlRMKSAmJiByZXZlcnNlVG9rZW5zKG1hc2tUb2tlbnNbMF0pLCBtYXNrVG9rZW5zO1xuICAgICAgICB9XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICAgICAgZ2VuZXJhdGVNYXNrU2V0OiBnZW5lcmF0ZU1hc2tTZXQsXG4gICAgICAgICAgICBhbmFseXNlTWFzazogYW5hbHlzZU1hc2tcbiAgICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIF9fd2VicGFja19yZXF1aXJlX18oNyksIF9fd2VicGFja19yZXF1aXJlX18oOSksIF9fd2VicGFja19yZXF1aXJlX18oMTApLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKSwgXG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbiAgICB9LCBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHZhciBJbnB1dG1hc2sgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuICAgICAgICBJbnB1dG1hc2suZXh0ZW5kRGVmaW5pdGlvbnMoe1xuICAgICAgICAgICAgQToge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRvcjogXCJbQS1aYS16XFx1MDQxMC1cXHUwNDRmXFx1MDQwMVxcdTA0NTFcXHhjMC1cXHhmZlxceGI1XVwiLFxuICAgICAgICAgICAgICAgIGNhc2luZzogXCJ1cHBlclwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCImXCI6IHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3I6IFwiWzAtOUEtWmEtelxcdTA0MTAtXFx1MDQ0ZlxcdTA0MDFcXHUwNDUxXFx4YzAtXFx4ZmZcXHhiNV1cIixcbiAgICAgICAgICAgICAgICBjYXNpbmc6IFwidXBwZXJcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiI1wiOiB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBcIlswLTlBLUZhLWZdXCIsXG4gICAgICAgICAgICAgICAgY2FzaW5nOiBcInVwcGVyXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBpcFZhbGlkYXRvclJlZ2V4ID0gbmV3IFJlZ0V4cChcIjI1WzAtNV18MlswLTRdWzAtOV18WzAxXVswLTldWzAtOV1cIik7XG4gICAgICAgIGZ1bmN0aW9uIGlwVmFsaWRhdG9yKGNocnMsIG1hc2tzZXQsIHBvcywgc3RyaWN0LCBvcHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hycyA9IC0xIDwgcG9zIC0gMSAmJiBcIi5cIiAhPT0gbWFza3NldC5idWZmZXJbcG9zIC0gMV0gPyAoY2hycyA9IG1hc2tzZXQuYnVmZmVyW3BvcyAtIDFdICsgY2hycywgXG4gICAgICAgICAgICAtMSA8IHBvcyAtIDIgJiYgXCIuXCIgIT09IG1hc2tzZXQuYnVmZmVyW3BvcyAtIDJdID8gbWFza3NldC5idWZmZXJbcG9zIC0gMl0gKyBjaHJzIDogXCIwXCIgKyBjaHJzKSA6IFwiMDBcIiArIGNocnMsIFxuICAgICAgICAgICAgaXBWYWxpZGF0b3JSZWdleC50ZXN0KGNocnMpO1xuICAgICAgICB9XG4gICAgICAgIElucHV0bWFzay5leHRlbmRBbGlhc2VzKHtcbiAgICAgICAgICAgIGNzc3VuaXQ6IHtcbiAgICAgICAgICAgICAgICByZWdleDogXCJbKy1dP1swLTldK1xcXFwuPyhbMC05XSspPyhweHxlbXxyZW18ZXh8JXxpbnxjbXxtbXxwdHxwYylcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVybDoge1xuICAgICAgICAgICAgICAgIHJlZ2V4OiBcIihodHRwcz98ZnRwKS8vLipcIixcbiAgICAgICAgICAgICAgICBhdXRvVW5tYXNrOiAhMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlwOiB7XG4gICAgICAgICAgICAgICAgbWFzazogXCJpW2lbaV1dLmpbaltqXV0ua1trW2tdXS5sW2xbbF1dXCIsXG4gICAgICAgICAgICAgICAgZGVmaW5pdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgaToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBpcFZhbGlkYXRvclxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBqOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3I6IGlwVmFsaWRhdG9yXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGs6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcjogaXBWYWxpZGF0b3JcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBpcFZhbGlkYXRvclxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvblVuTWFzazogZnVuY3Rpb24gb25Vbk1hc2sobWFza2VkVmFsdWUsIHVubWFza2VkVmFsdWUsIG9wdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hc2tlZFZhbHVlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaW5wdXRtb2RlOiBcIm51bWVyaWNcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVtYWlsOiB7XG4gICAgICAgICAgICAgICAgbWFzazogXCIqezEsNjR9Wy4qezEsNjR9XVsuKnsxLDY0fV1bLip7MSw2M31dQC17MSw2M30uLXsxLDYzfVsuLXsxLDYzfV1bLi17MSw2M31dXCIsXG4gICAgICAgICAgICAgICAgZ3JlZWR5OiAhMSxcbiAgICAgICAgICAgICAgICBjYXNpbmc6IFwibG93ZXJcIixcbiAgICAgICAgICAgICAgICBvbkJlZm9yZVBhc3RlOiBmdW5jdGlvbiBvbkJlZm9yZVBhc3RlKHBhc3RlZFZhbHVlLCBvcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXN0ZWRWYWx1ZSA9IHBhc3RlZFZhbHVlLnRvTG93ZXJDYXNlKCksIHBhc3RlZFZhbHVlLnJlcGxhY2UoXCJtYWlsdG86XCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGVmaW5pdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgXCIqXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcjogXCJbMC05XFx1ZmYxMS1cXHVmZjE5QS1aYS16XFx1MDQxMC1cXHUwNDRmXFx1MDQwMVxcdTA0NTFcXHhjMC1cXHhmZlxceGI1ISMkJSYnKisvPT9eX2B7fH1+LV1cIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIi1cIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBcIlswLTlBLVphLXotXVwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uVW5NYXNrOiBmdW5jdGlvbiBvblVuTWFzayhtYXNrZWRWYWx1ZSwgdW5tYXNrZWRWYWx1ZSwgb3B0cykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFza2VkVmFsdWU7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbnB1dG1vZGU6IFwiZW1haWxcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1hYzoge1xuICAgICAgICAgICAgICAgIG1hc2s6IFwiIyM6IyM6IyM6IyM6IyM6IyNcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZpbjoge1xuICAgICAgICAgICAgICAgIG1hc2s6IFwiVnsxM305ezR9XCIsXG4gICAgICAgICAgICAgICAgZGVmaW5pdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgVjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBcIltBLUhKLU5QUi1aYS1oai1ucHItelxcXFxkXVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzaW5nOiBcInVwcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2xlYXJJbmNvbXBsZXRlOiAhMCxcbiAgICAgICAgICAgICAgICBhdXRvVW5tYXNrOiAhMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNzbjoge1xuICAgICAgICAgICAgICAgIG1hc2s6IFwiOTk5LTk5LTk5OTlcIixcbiAgICAgICAgICAgICAgICBwb3N0VmFsaWRhdGlvbjogZnVuY3Rpb24gcG9zdFZhbGlkYXRpb24oYnVmZmVyLCBwb3MsIGMsIGN1cnJlbnRSZXN1bHQsIG9wdHMsIG1hc2tzZXQsIHN0cmljdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gL14oPyEyMTktMDktOTk5OXwwNzgtMDUtMTEyMCkoPyE2NjZ8MDAwfDkuezJ9KS57M30tKD8hMDApLnsyfS0oPyEwezR9KS57NH0kLy50ZXN0KGJ1ZmZlci5qb2luKFwiXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLCBtb2R1bGUuZXhwb3J0cyA9IElucHV0bWFzaztcbiAgICB9LCBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gICAgICAgICAgICB9IDogZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICAgICAgICAgICAgfSwgX3R5cGVvZihvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKSwgd2luZG93ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KSwgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQsIHVhID0gd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCB8fCBcIlwiLCBpZSA9IDAgPCB1YS5pbmRleE9mKFwiTVNJRSBcIikgfHwgMCA8IHVhLmluZGV4T2YoXCJUcmlkZW50L1wiKSwgbW9iaWxlID0gXCJvbnRvdWNoc3RhcnRcIiBpbiB3aW5kb3csIGllbW9iaWxlID0gL2llbW9iaWxlL2kudGVzdCh1YSksIGlwaG9uZSA9IC9pcGhvbmUvaS50ZXN0KHVhKSAmJiAhaWVtb2JpbGUsIGtleUNvZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1hc2tTY29wZShhY3Rpb25PYmosIG1hc2tzZXQsIG9wdHMpIHtcbiAgICAgICAgICAgIG1hc2tzZXQgPSBtYXNrc2V0IHx8IHRoaXMubWFza3NldCwgb3B0cyA9IG9wdHMgfHwgdGhpcy5vcHRzO1xuICAgICAgICAgICAgdmFyIGlucHV0bWFzayA9IHRoaXMsIGVsID0gdGhpcy5lbCwgaXNSVEwgPSB0aGlzLmlzUlRMIHx8ICh0aGlzLmlzUlRMID0gb3B0cy5udW1lcmljSW5wdXQpLCB1bmRvVmFsdWUsICRlbCwgc2tpcEtleVByZXNzRXZlbnQgPSAhMSwgc2tpcElucHV0RXZlbnQgPSAhMSwgdmFsaWRhdGlvbkV2ZW50ID0gITEsIGlnbm9yYWJsZSA9ICExLCBtYXhMZW5ndGgsIG1vdXNlRW50ZXIgPSAhMSwgb3JpZ2luYWxQbGFjZWhvbGRlciA9IHZvaWQgMDtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldE1hc2tUZW1wbGF0ZShiYXNlT25JbnB1dCwgbWluaW1hbFBvcywgaW5jbHVkZU1vZGUsIG5vSml0LCBjbGVhck9wdGlvbmFsVGFpbCkge1xuICAgICAgICAgICAgICAgIHZhciBncmVlZHkgPSBvcHRzLmdyZWVkeTtcbiAgICAgICAgICAgICAgICBjbGVhck9wdGlvbmFsVGFpbCAmJiAob3B0cy5ncmVlZHkgPSAhMSksIG1pbmltYWxQb3MgPSBtaW5pbWFsUG9zIHx8IDA7XG4gICAgICAgICAgICAgICAgdmFyIG1hc2tUZW1wbGF0ZSA9IFtdLCBuZHhJbnRsenIsIHBvcyA9IDAsIHRlc3QsIHRlc3RQb3MsIGppdFJlbmRlclN0YXRpYztcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghMCA9PT0gYmFzZU9uSW5wdXQgJiYgbWFza3NldC52YWxpZFBvc2l0aW9uc1twb3NdKSB0ZXN0UG9zID0gY2xlYXJPcHRpb25hbFRhaWwgJiYgITAgPT09IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcG9zXS5tYXRjaC5vcHRpb25hbGl0eSAmJiB2b2lkIDAgPT09IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcG9zICsgMV0gJiYgKCEwID09PSBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW3Bvc10uZ2VuZXJhdGVkSW5wdXQgfHwgbWFza3NldC52YWxpZFBvc2l0aW9uc1twb3NdLmlucHV0ID09IG9wdHMuc2tpcE9wdGlvbmFsUGFydENoYXJhY3RlciAmJiAwIDwgcG9zKSA/IGRldGVybWluZVRlc3RUZW1wbGF0ZShwb3MsIGdldFRlc3RzKHBvcywgbmR4SW50bHpyLCBwb3MgLSAxKSkgOiBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW3Bvc10sIFxuICAgICAgICAgICAgICAgICAgICB0ZXN0ID0gdGVzdFBvcy5tYXRjaCwgbmR4SW50bHpyID0gdGVzdFBvcy5sb2NhdG9yLnNsaWNlKCksIG1hc2tUZW1wbGF0ZS5wdXNoKCEwID09PSBpbmNsdWRlTW9kZSA/IHRlc3RQb3MuaW5wdXQgOiAhMSA9PT0gaW5jbHVkZU1vZGUgPyB0ZXN0Lm5hdGl2ZURlZiA6IGdldFBsYWNlaG9sZGVyKHBvcywgdGVzdCkpOyBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RQb3MgPSBnZXRUZXN0VGVtcGxhdGUocG9zLCBuZHhJbnRsenIsIHBvcyAtIDEpLCB0ZXN0ID0gdGVzdFBvcy5tYXRjaCwgbmR4SW50bHpyID0gdGVzdFBvcy5sb2NhdG9yLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaml0TWFza2luZyA9ICEwICE9PSBub0ppdCAmJiAoITEgIT09IG9wdHMuaml0TWFza2luZyA/IG9wdHMuaml0TWFza2luZyA6IHRlc3Quaml0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGppdFJlbmRlclN0YXRpYyA9IGppdFJlbmRlclN0YXRpYyAmJiB0ZXN0LnN0YXRpYyAmJiB0ZXN0LmRlZiAhPT0gb3B0cy5ncm91cFNlcGFyYXRvciAmJiBudWxsID09PSB0ZXN0LmZuIHx8IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcG9zIC0gMV0gJiYgdGVzdC5zdGF0aWMgJiYgdGVzdC5kZWYgIT09IG9wdHMuZ3JvdXBTZXBhcmF0b3IgJiYgbnVsbCA9PT0gdGVzdC5mbiwgXG4gICAgICAgICAgICAgICAgICAgICAgICBqaXRSZW5kZXJTdGF0aWMgfHwgITEgPT09IGppdE1hc2tpbmcgfHwgdm9pZCAwID09PSBqaXRNYXNraW5nIHx8IFwibnVtYmVyXCIgPT0gdHlwZW9mIGppdE1hc2tpbmcgJiYgaXNGaW5pdGUoaml0TWFza2luZykgJiYgcG9zIDwgaml0TWFza2luZyA/IG1hc2tUZW1wbGF0ZS5wdXNoKCExID09PSBpbmNsdWRlTW9kZSA/IHRlc3QubmF0aXZlRGVmIDogZ2V0UGxhY2Vob2xkZXIocG9zLCB0ZXN0KSkgOiBqaXRSZW5kZXJTdGF0aWMgPSAhMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwb3MrKztcbiAgICAgICAgICAgICAgICB9IHdoaWxlICgodm9pZCAwID09PSBtYXhMZW5ndGggfHwgcG9zIDwgbWF4TGVuZ3RoKSAmJiAoITAgIT09IHRlc3Quc3RhdGljIHx8IFwiXCIgIT09IHRlc3QuZGVmKSB8fCBwb3MgPCBtaW5pbWFsUG9zKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIiA9PT0gbWFza1RlbXBsYXRlW21hc2tUZW1wbGF0ZS5sZW5ndGggLSAxXSAmJiBtYXNrVGVtcGxhdGUucG9wKCksICExID09PSBpbmNsdWRlTW9kZSAmJiB2b2lkIDAgIT09IG1hc2tzZXQubWFza0xlbmd0aCB8fCAobWFza3NldC5tYXNrTGVuZ3RoID0gcG9zIC0gMSksIFxuICAgICAgICAgICAgICAgIG9wdHMuZ3JlZWR5ID0gZ3JlZWR5LCBtYXNrVGVtcGxhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZXNldE1hc2tTZXQoc29mdCkge1xuICAgICAgICAgICAgICAgIG1hc2tzZXQuYnVmZmVyID0gdm9pZCAwLCAhMCAhPT0gc29mdCAmJiAobWFza3NldC52YWxpZFBvc2l0aW9ucyA9IHt9LCBtYXNrc2V0LnAgPSAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldExhc3RWYWxpZFBvc2l0aW9uKGNsb3Nlc3RUbywgc3RyaWN0LCB2YWxpZFBvc2l0aW9ucykge1xuICAgICAgICAgICAgICAgIHZhciBiZWZvcmUgPSAtMSwgYWZ0ZXIgPSAtMSwgdmFsaWRzID0gdmFsaWRQb3NpdGlvbnMgfHwgbWFza3NldC52YWxpZFBvc2l0aW9ucztcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBwb3NOZHggaW4gdm9pZCAwID09PSBjbG9zZXN0VG8gJiYgKGNsb3Nlc3RUbyA9IC0xKSwgdmFsaWRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwc05keCA9IHBhcnNlSW50KHBvc05keCk7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkc1twc05keF0gJiYgKHN0cmljdCB8fCAhMCAhPT0gdmFsaWRzW3BzTmR4XS5nZW5lcmF0ZWRJbnB1dCkgJiYgKHBzTmR4IDw9IGNsb3Nlc3RUbyAmJiAoYmVmb3JlID0gcHNOZHgpLCBcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdFRvIDw9IHBzTmR4ICYmIChhZnRlciA9IHBzTmR4KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAtMSA9PT0gYmVmb3JlIHx8IGJlZm9yZSA9PSBjbG9zZXN0VG8gPyBhZnRlciA6IC0xID09IGFmdGVyID8gYmVmb3JlIDogY2xvc2VzdFRvIC0gYmVmb3JlIDwgYWZ0ZXIgLSBjbG9zZXN0VG8gPyBiZWZvcmUgOiBhZnRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldERlY2lzaW9uVGFrZXIodHN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlY2lzaW9uVGFrZXIgPSB0c3QubG9jYXRvclt0c3QuYWx0ZXJuYXRpb25dO1xuICAgICAgICAgICAgICAgIHJldHVybiBcInN0cmluZ1wiID09IHR5cGVvZiBkZWNpc2lvblRha2VyICYmIDAgPCBkZWNpc2lvblRha2VyLmxlbmd0aCAmJiAoZGVjaXNpb25UYWtlciA9IGRlY2lzaW9uVGFrZXIuc3BsaXQoXCIsXCIpWzBdKSwgXG4gICAgICAgICAgICAgICAgdm9pZCAwICE9PSBkZWNpc2lvblRha2VyID8gZGVjaXNpb25UYWtlci50b1N0cmluZygpIDogXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldExvY2F0b3IodHN0LCBhbGlnbikge1xuICAgICAgICAgICAgICAgIHZhciBsb2NhdG9yID0gKG51bGwgIT0gdHN0LmFsdGVybmF0aW9uID8gdHN0Lm1sb2NbZ2V0RGVjaXNpb25UYWtlcih0c3QpXSA6IHRzdC5sb2NhdG9yKS5qb2luKFwiXCIpO1xuICAgICAgICAgICAgICAgIGlmIChcIlwiICE9PSBsb2NhdG9yKSBmb3IgKDtsb2NhdG9yLmxlbmd0aCA8IGFsaWduOyApIGxvY2F0b3IgKz0gXCIwXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBkZXRlcm1pbmVUZXN0VGVtcGxhdGUocG9zLCB0ZXN0cykge1xuICAgICAgICAgICAgICAgIHBvcyA9IDAgPCBwb3MgPyBwb3MgLSAxIDogMDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhbHRUZXN0ID0gZ2V0VGVzdChwb3MpLCB0YXJnZXRMb2NhdG9yID0gZ2V0TG9jYXRvcihhbHRUZXN0KSwgdHN0TG9jYXRvciwgY2xvc2VzdCwgYmVzdE1hdGNoLCBuZHggPSAwOyBuZHggPCB0ZXN0cy5sZW5ndGg7IG5keCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0c3QgPSB0ZXN0c1tuZHhdO1xuICAgICAgICAgICAgICAgICAgICB0c3RMb2NhdG9yID0gZ2V0TG9jYXRvcih0c3QsIHRhcmdldExvY2F0b3IubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5hYnModHN0TG9jYXRvciAtIHRhcmdldExvY2F0b3IpO1xuICAgICAgICAgICAgICAgICAgICAodm9pZCAwID09PSBjbG9zZXN0IHx8IFwiXCIgIT09IHRzdExvY2F0b3IgJiYgZGlzdGFuY2UgPCBjbG9zZXN0IHx8IGJlc3RNYXRjaCAmJiAhb3B0cy5ncmVlZHkgJiYgYmVzdE1hdGNoLm1hdGNoLm9wdGlvbmFsaXR5ICYmIFwibWFzdGVyXCIgPT09IGJlc3RNYXRjaC5tYXRjaC5uZXdCbG9ja01hcmtlciAmJiAoIXRzdC5tYXRjaC5vcHRpb25hbGl0eSB8fCAhdHN0Lm1hdGNoLm5ld0Jsb2NrTWFya2VyKSB8fCBiZXN0TWF0Y2ggJiYgYmVzdE1hdGNoLm1hdGNoLm9wdGlvbmFsUXVhbnRpZmllciAmJiAhdHN0Lm1hdGNoLm9wdGlvbmFsUXVhbnRpZmllcikgJiYgKGNsb3Nlc3QgPSBkaXN0YW5jZSwgXG4gICAgICAgICAgICAgICAgICAgIGJlc3RNYXRjaCA9IHRzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBiZXN0TWF0Y2g7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRUZXN0VGVtcGxhdGUocG9zLCBuZHhJbnRsenIsIHRzdFBzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcG9zXSB8fCBkZXRlcm1pbmVUZXN0VGVtcGxhdGUocG9zLCBnZXRUZXN0cyhwb3MsIG5keEludGx6ciA/IG5keEludGx6ci5zbGljZSgpIDogbmR4SW50bHpyLCB0c3RQcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0VGVzdChwb3MsIHRlc3RzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcG9zXSA/IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcG9zXSA6ICh0ZXN0cyB8fCBnZXRUZXN0cyhwb3MpKVswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHBvc2l0aW9uQ2FuTWF0Y2hEZWZpbml0aW9uKHBvcywgdGVzdERlZmluaXRpb24sIG9wdHMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB2YWxpZCA9ICExLCB0ZXN0cyA9IGdldFRlc3RzKHBvcyksIHRuZHggPSAwOyB0bmR4IDwgdGVzdHMubGVuZ3RoOyB0bmR4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlc3RzW3RuZHhdLm1hdGNoICYmICghKHRlc3RzW3RuZHhdLm1hdGNoLm5hdGl2ZURlZiAhPT0gdGVzdERlZmluaXRpb24ubWF0Y2hbb3B0cy5zaGlmdFBvc2l0aW9ucyA/IFwiZGVmXCIgOiBcIm5hdGl2ZURlZlwiXSB8fCBvcHRzLnNoaWZ0UG9zaXRpb25zICYmIHRlc3REZWZpbml0aW9uLm1hdGNoLnN0YXRpYykgfHwgdGVzdHNbdG5keF0ubWF0Y2gubmF0aXZlRGVmID09PSB0ZXN0RGVmaW5pdGlvbi5tYXRjaC5uYXRpdmVEZWYpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9ICEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlc3RzW3RuZHhdLm1hdGNoICYmIHRlc3RzW3RuZHhdLm1hdGNoLmRlZiA9PT0gdGVzdERlZmluaXRpb24ubWF0Y2gubmF0aXZlRGVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAhMSA9PT0gdmFsaWQgJiYgdm9pZCAwICE9PSBtYXNrc2V0LmppdE9mZnNldFtwb3NdICYmICh2YWxpZCA9IHBvc2l0aW9uQ2FuTWF0Y2hEZWZpbml0aW9uKHBvcyArIG1hc2tzZXQuaml0T2Zmc2V0W3Bvc10sIHRlc3REZWZpbml0aW9uLCBvcHRzKSksIFxuICAgICAgICAgICAgICAgIHZhbGlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0VGVzdHMocG9zLCBuZHhJbnRsenIsIHRzdFBzKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hc2tUb2tlbnMgPSBtYXNrc2V0Lm1hc2tUb2tlbiwgdGVzdFBvcyA9IG5keEludGx6ciA/IHRzdFBzIDogMCwgbmR4SW5pdGlhbGl6ZXIgPSBuZHhJbnRsenIgPyBuZHhJbnRsenIuc2xpY2UoKSA6IFsgMCBdLCBtYXRjaGVzID0gW10sIGluc2VydFN0b3AgPSAhMSwgbGF0ZXN0TWF0Y2gsIGNhY2hlRGVwZW5kZW5jeSA9IG5keEludGx6ciA/IG5keEludGx6ci5qb2luKFwiXCIpIDogXCJcIjtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlVGVzdEZyb21Ub2tlbihtYXNrVG9rZW4sIG5keEluaXRpYWxpemVyLCBsb29wTmR4LCBxdWFudGlmaWVyUmVjdXJzZSkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBoYW5kbGVNYXRjaChtYXRjaCwgbG9vcE5keCwgcXVhbnRpZmllclJlY3Vyc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzRmlyc3RNYXRjaChsYXRlc3RNYXRjaCwgdG9rZW5Hcm91cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdE1hdGNoID0gMCA9PT0gJC5pbkFycmF5KGxhdGVzdE1hdGNoLCB0b2tlbkdyb3VwLm1hdGNoZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdE1hdGNoIHx8ICQuZWFjaCh0b2tlbkdyb3VwLm1hdGNoZXMsIGZ1bmN0aW9uKG5keCwgbWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEwID09PSBtYXRjaC5pc1F1YW50aWZpZXIgPyBmaXJzdE1hdGNoID0gaXNGaXJzdE1hdGNoKGxhdGVzdE1hdGNoLCB0b2tlbkdyb3VwLm1hdGNoZXNbbmR4IC0gMV0pIDogT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hdGNoLCBcIm1hdGNoZXNcIikgJiYgKGZpcnN0TWF0Y2ggPSBpc0ZpcnN0TWF0Y2gobGF0ZXN0TWF0Y2gsIG1hdGNoKSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdE1hdGNoKSByZXR1cm4gITE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksIGZpcnN0TWF0Y2g7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlTmR4SW5pdGlhbGl6ZXIocG9zLCBhbHRlcm5hdGVOZHgsIHRhcmdldEFsdGVybmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJlc3RNYXRjaCwgaW5kZXhQb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChtYXNrc2V0LnRlc3RzW3Bvc10gfHwgbWFza3NldC52YWxpZFBvc2l0aW9uc1twb3NdKSAmJiAkLmVhY2gobWFza3NldC50ZXN0c1twb3NdIHx8IFsgbWFza3NldC52YWxpZFBvc2l0aW9uc1twb3NdIF0sIGZ1bmN0aW9uKG5keCwgbG1udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG1udC5tbG9jW2FsdGVybmF0ZU5keF0pIHJldHVybiBiZXN0TWF0Y2ggPSBsbW50LCAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFsdGVybmF0aW9uID0gdm9pZCAwICE9PSB0YXJnZXRBbHRlcm5hdGlvbiA/IHRhcmdldEFsdGVybmF0aW9uIDogbG1udC5hbHRlcm5hdGlvbiwgbmR4UG9zID0gdm9pZCAwICE9PSBsbW50LmxvY2F0b3JbYWx0ZXJuYXRpb25dID8gbG1udC5sb2NhdG9yW2FsdGVybmF0aW9uXS50b1N0cmluZygpLmluZGV4T2YoYWx0ZXJuYXRlTmR4KSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAwID09PSBpbmRleFBvcyB8fCBuZHhQb3MgPCBpbmRleFBvcykgJiYgLTEgIT09IG5keFBvcyAmJiAoYmVzdE1hdGNoID0gbG1udCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4UG9zID0gbmR4UG9zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwgYmVzdE1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiZXN0TWF0Y2hBbHRJbmRleCA9IGJlc3RNYXRjaC5sb2NhdG9yW2Jlc3RNYXRjaC5hbHRlcm5hdGlvbl0sIGxvY2F0b3IgPSBiZXN0TWF0Y2gubWxvY1thbHRlcm5hdGVOZHhdIHx8IGJlc3RNYXRjaC5tbG9jW2Jlc3RNYXRjaEFsdEluZGV4XSB8fCBiZXN0TWF0Y2gubG9jYXRvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3Iuc2xpY2UoKHZvaWQgMCAhPT0gdGFyZ2V0QWx0ZXJuYXRpb24gPyB0YXJnZXRBbHRlcm5hdGlvbiA6IGJlc3RNYXRjaC5hbHRlcm5hdGlvbikgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgMCAhPT0gdGFyZ2V0QWx0ZXJuYXRpb24gPyByZXNvbHZlTmR4SW5pdGlhbGl6ZXIocG9zLCBhbHRlcm5hdGVOZHgpIDogdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNTdWJzZXRPZihzb3VyY2UsIHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGV4cGFuZChwYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGV4cGFuZGVkID0gW10sIHN0YXJ0ID0gLTEsIGVuZCwgaSA9IDAsIGwgPSBwYXR0ZXJuLmxlbmd0aDsgaSA8IGw7IGkrKykgaWYgKFwiLVwiID09PSBwYXR0ZXJuLmNoYXJBdChpKSkgZm9yIChlbmQgPSBwYXR0ZXJuLmNoYXJDb2RlQXQoaSArIDEpOyArK3N0YXJ0IDwgZW5kOyApIGV4cGFuZGVkLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShzdGFydCkpOyBlbHNlIHN0YXJ0ID0gcGF0dGVybi5jaGFyQ29kZUF0KGkpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWQucHVzaChwYXR0ZXJuLmNoYXJBdChpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleHBhbmRlZC5qb2luKFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlLm1hdGNoLmRlZiA9PT0gdGFyZ2V0Lm1hdGNoLm5hdGl2ZURlZiB8fCAhKCEob3B0cy5yZWdleCB8fCBzb3VyY2UubWF0Y2guZm4gaW5zdGFuY2VvZiBSZWdFeHAgJiYgdGFyZ2V0Lm1hdGNoLmZuIGluc3RhbmNlb2YgUmVnRXhwKSB8fCAhMCA9PT0gc291cmNlLm1hdGNoLnN0YXRpYyB8fCAhMCA9PT0gdGFyZ2V0Lm1hdGNoLnN0YXRpYykgJiYgLTEgIT09IGV4cGFuZCh0YXJnZXQubWF0Y2guZm4udG9TdHJpbmcoKS5yZXBsYWNlKC9bW1xcXS9dL2csIFwiXCIpKS5pbmRleE9mKGV4cGFuZChzb3VyY2UubWF0Y2guZm4udG9TdHJpbmcoKS5yZXBsYWNlKC9bW1xcXS9dL2csIFwiXCIpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzdGF0aWNDYW5NYXRjaERlZmluaXRpb24oc291cmNlLCB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gITAgPT09IHNvdXJjZS5tYXRjaC5zdGF0aWMgJiYgITAgIT09IHRhcmdldC5tYXRjaC5zdGF0aWMgJiYgdGFyZ2V0Lm1hdGNoLmZuLnRlc3Qoc291cmNlLm1hdGNoLmRlZiwgbWFza3NldCwgcG9zLCAhMSwgb3B0cywgITEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc2V0TWVyZ2VMb2NhdG9ycyh0YXJnZXRNYXRjaCwgYWx0TWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWx0ZXJuYXRpb25OZHggPSB0YXJnZXRNYXRjaC5hbHRlcm5hdGlvbiwgc2hvdWxkTWVyZ2UgPSB2b2lkIDAgPT09IGFsdE1hdGNoIHx8IGFsdGVybmF0aW9uTmR4ID09PSBhbHRNYXRjaC5hbHRlcm5hdGlvbiAmJiAtMSA9PT0gdGFyZ2V0TWF0Y2gubG9jYXRvclthbHRlcm5hdGlvbk5keF0udG9TdHJpbmcoKS5pbmRleE9mKGFsdE1hdGNoLmxvY2F0b3JbYWx0ZXJuYXRpb25OZHhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZE1lcmdlICYmIGFsdGVybmF0aW9uTmR4ID4gYWx0TWF0Y2guYWx0ZXJuYXRpb24pIGZvciAodmFyIGkgPSBhbHRNYXRjaC5hbHRlcm5hdGlvbjsgaSA8IGFsdGVybmF0aW9uTmR4OyBpKyspIGlmICh0YXJnZXRNYXRjaC5sb2NhdG9yW2ldICE9PSBhbHRNYXRjaC5sb2NhdG9yW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aW9uTmR4ID0gaSwgc2hvdWxkTWVyZ2UgPSAhMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRNZXJnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRNYXRjaC5tbG9jID0gdGFyZ2V0TWF0Y2gubWxvYyB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvY05keCA9IHRhcmdldE1hdGNoLmxvY2F0b3JbYWx0ZXJuYXRpb25OZHhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodm9pZCAwICE9PSBsb2NOZHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcInN0cmluZ1wiID09IHR5cGVvZiBsb2NOZHggJiYgKGxvY05keCA9IGxvY05keC5zcGxpdChcIixcIilbMF0pLCB2b2lkIDAgPT09IHRhcmdldE1hdGNoLm1sb2NbbG9jTmR4XSAmJiAodGFyZ2V0TWF0Y2gubWxvY1tsb2NOZHhdID0gdGFyZ2V0TWF0Y2gubG9jYXRvci5zbGljZSgpKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIDAgIT09IGFsdE1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbmR4IGluIGFsdE1hdGNoLm1sb2MpIFwic3RyaW5nXCIgPT0gdHlwZW9mIG5keCAmJiAobmR4ID0gbmR4LnNwbGl0KFwiLFwiKVswXSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgMCA9PT0gdGFyZ2V0TWF0Y2gubWxvY1tuZHhdICYmICh0YXJnZXRNYXRjaC5tbG9jW25keF0gPSBhbHRNYXRjaC5tbG9jW25keF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE1hdGNoLmxvY2F0b3JbYWx0ZXJuYXRpb25OZHhdID0gT2JqZWN0LmtleXModGFyZ2V0TWF0Y2gubWxvYykuam9pbihcIixcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TWF0Y2guYWx0ZXJuYXRpb24gPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzU2FtZUxldmVsKHRhcmdldE1hdGNoLCBhbHRNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRNYXRjaC5sb2NhdG9yLmxlbmd0aCAhPT0gYWx0TWF0Y2gubG9jYXRvci5sZW5ndGgpIHJldHVybiAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsb2NOZHggPSB0YXJnZXRNYXRjaC5hbHRlcm5hdGlvbiArIDE7IGxvY05keCA8IHRhcmdldE1hdGNoLmxvY2F0b3IubGVuZ3RoOyBsb2NOZHgrKykgaWYgKHRhcmdldE1hdGNoLmxvY2F0b3JbbG9jTmR4XSAhPT0gYWx0TWF0Y2gubG9jYXRvcltsb2NOZHhdKSByZXR1cm4gITE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlc3RQb3MgPiBvcHRzLl9tYXhUZXN0UG9zICYmIHZvaWQgMCAhPT0gcXVhbnRpZmllclJlY3Vyc2UpIHRocm93IFwiSW5wdXRtYXNrOiBUaGVyZSBpcyBwcm9iYWJseSBhbiBlcnJvciBpbiB5b3VyIG1hc2sgZGVmaW5pdGlvbiBvciBpbiB0aGUgY29kZS4gQ3JlYXRlIGFuIGlzc3VlIG9uIGdpdGh1YiB3aXRoIGFuIGV4YW1wbGUgb2YgdGhlIG1hc2sgeW91IGFyZSB1c2luZy4gXCIgKyBtYXNrc2V0Lm1hc2s7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVzdFBvcyA9PT0gcG9zICYmIHZvaWQgMCA9PT0gbWF0Y2gubWF0Y2hlcykgcmV0dXJuIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2g6IG1hdGNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0b3I6IGxvb3BOZHgucmV2ZXJzZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNkOiBjYWNoZURlcGVuZGVuY3ksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWxvYzoge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLCAhMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IG1hdGNoLm1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2guaXNHcm91cCAmJiBxdWFudGlmaWVyUmVjdXJzZSAhPT0gbWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gaGFuZGxlTWF0Y2gobWFza1Rva2VuLm1hdGNoZXNbJC5pbkFycmF5KG1hdGNoLCBtYXNrVG9rZW4ubWF0Y2hlcykgKyAxXSwgbG9vcE5keCwgcXVhbnRpZmllclJlY3Vyc2UpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2gpIHJldHVybiAhMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoLmlzT3B0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wdGlvbmFsVG9rZW4gPSBtYXRjaCwgbXRjaHNOZHggPSBtYXRjaGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gcmVzb2x2ZVRlc3RGcm9tVG9rZW4obWF0Y2gsIG5keEluaXRpYWxpemVyLCBsb29wTmR4LCBxdWFudGlmaWVyUmVjdXJzZSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQuZWFjaChtYXRjaGVzLCBmdW5jdGlvbihuZHgsIG10Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGNoc05keCA8PSBuZHggJiYgKG10Y2gubWF0Y2gub3B0aW9uYWxpdHkgPSAhMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwgbGF0ZXN0TWF0Y2ggPSBtYXRjaGVzW21hdGNoZXMubGVuZ3RoIC0gMV0ubWF0Y2gsIHZvaWQgMCAhPT0gcXVhbnRpZmllclJlY3Vyc2UgfHwgIWlzRmlyc3RNYXRjaChsYXRlc3RNYXRjaCwgb3B0aW9uYWxUb2tlbikpIHJldHVybiAhMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydFN0b3AgPSAhMCwgdGVzdFBvcyA9IHBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2guaXNBbHRlcm5hdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbHRlcm5hdGVUb2tlbiA9IG1hdGNoLCBtYWx0ZXJuYXRlTWF0Y2hlcyA9IFtdLCBtYWx0TWF0Y2hlcywgY3VycmVudE1hdGNoZXMgPSBtYXRjaGVzLnNsaWNlKCksIGxvb3BOZHhDbnQgPSBsb29wTmR4Lmxlbmd0aCwgYWx0SW5kZXggPSAwIDwgbmR4SW5pdGlhbGl6ZXIubGVuZ3RoID8gbmR4SW5pdGlhbGl6ZXIuc2hpZnQoKSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLTEgPT09IGFsdEluZGV4IHx8IFwic3RyaW5nXCIgPT0gdHlwZW9mIGFsdEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudFBvcyA9IHRlc3RQb3MsIG5keEluaXRpYWxpemVyQ2xvbmUgPSBuZHhJbml0aWFsaXplci5zbGljZSgpLCBhbHRJbmRleEFyciA9IFtdLCBhbW5keDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcInN0cmluZ1wiID09IHR5cGVvZiBhbHRJbmRleCkgYWx0SW5kZXhBcnIgPSBhbHRJbmRleC5zcGxpdChcIixcIik7IGVsc2UgZm9yIChhbW5keCA9IDA7IGFtbmR4IDwgYWx0ZXJuYXRlVG9rZW4ubWF0Y2hlcy5sZW5ndGg7IGFtbmR4KyspIGFsdEluZGV4QXJyLnB1c2goYW1uZHgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodm9pZCAwICE9PSBtYXNrc2V0LmV4Y2x1ZGVzW3Bvc10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBhbHRJbmRleEFyckNsb25lID0gYWx0SW5kZXhBcnIuc2xpY2UoKSwgaSA9IDAsIGV4bCA9IG1hc2tzZXQuZXhjbHVkZXNbcG9zXS5sZW5ndGg7IGkgPCBleGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXhjbHVkZVNldCA9IG1hc2tzZXQuZXhjbHVkZXNbcG9zXVtpXS50b1N0cmluZygpLnNwbGl0KFwiOlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcE5keC5sZW5ndGggPT0gZXhjbHVkZVNldFsxXSAmJiBhbHRJbmRleEFyci5zcGxpY2UoYWx0SW5kZXhBcnIuaW5kZXhPZihleGNsdWRlU2V0WzBdKSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgPT09IGFsdEluZGV4QXJyLmxlbmd0aCAmJiAoZGVsZXRlIG1hc2tzZXQuZXhjbHVkZXNbcG9zXSwgYWx0SW5kZXhBcnIgPSBhbHRJbmRleEFyckNsb25lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghMCA9PT0gb3B0cy5rZWVwU3RhdGljIHx8IGlzRmluaXRlKHBhcnNlSW50KG9wdHMua2VlcFN0YXRpYykpICYmIGN1cnJlbnRQb3MgPj0gb3B0cy5rZWVwU3RhdGljKSAmJiAoYWx0SW5kZXhBcnIgPSBhbHRJbmRleEFyci5zbGljZSgwLCAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB1bk1hdGNoZWRBbHRlcm5hdGlvbiA9ICExLCBuZHggPSAwOyBuZHggPCBhbHRJbmRleEFyci5sZW5ndGg7IG5keCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW1uZHggPSBwYXJzZUludChhbHRJbmRleEFycltuZHhdKSwgbWF0Y2hlcyA9IFtdLCBuZHhJbml0aWFsaXplciA9IFwic3RyaW5nXCIgPT0gdHlwZW9mIGFsdEluZGV4ICYmIHJlc29sdmVOZHhJbml0aWFsaXplcih0ZXN0UG9zLCBhbW5keCwgbG9vcE5keENudCkgfHwgbmR4SW5pdGlhbGl6ZXJDbG9uZS5zbGljZSgpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGVUb2tlbi5tYXRjaGVzW2FtbmR4XSAmJiBoYW5kbGVNYXRjaChhbHRlcm5hdGVUb2tlbi5tYXRjaGVzW2FtbmR4XSwgWyBhbW5keCBdLmNvbmNhdChsb29wTmR4KSwgcXVhbnRpZmllclJlY3Vyc2UpID8gbWF0Y2ggPSAhMCA6IDAgPT09IG5keCAmJiAodW5NYXRjaGVkQWx0ZXJuYXRpb24gPSAhMCksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbHRNYXRjaGVzID0gbWF0Y2hlcy5zbGljZSgpLCB0ZXN0UG9zID0gY3VycmVudFBvcywgbWF0Y2hlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG5keDEgPSAwOyBuZHgxIDwgbWFsdE1hdGNoZXMubGVuZ3RoOyBuZHgxKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFsdE1hdGNoID0gbWFsdE1hdGNoZXNbbmR4MV0sIGRyb3BNYXRjaCA9ICExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRNYXRjaC5tYXRjaC5qaXQgPSBhbHRNYXRjaC5tYXRjaC5qaXQgfHwgdW5NYXRjaGVkQWx0ZXJuYXRpb24sIGFsdE1hdGNoLmFsdGVybmF0aW9uID0gYWx0TWF0Y2guYWx0ZXJuYXRpb24gfHwgbG9vcE5keENudCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1lcmdlTG9jYXRvcnMoYWx0TWF0Y2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBuZHgyID0gMDsgbmR4MiA8IG1hbHRlcm5hdGVNYXRjaGVzLmxlbmd0aDsgbmR4MisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWx0TWF0Y2gyID0gbWFsdGVybmF0ZU1hdGNoZXNbbmR4Ml07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXCJzdHJpbmdcIiAhPSB0eXBlb2YgYWx0SW5kZXggfHwgdm9pZCAwICE9PSBhbHRNYXRjaC5hbHRlcm5hdGlvbiAmJiAtMSAhPT0gJC5pbkFycmF5KGFsdE1hdGNoLmxvY2F0b3JbYWx0TWF0Y2guYWx0ZXJuYXRpb25dLnRvU3RyaW5nKCksIGFsdEluZGV4QXJyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbHRNYXRjaC5tYXRjaC5uYXRpdmVEZWYgPT09IGFsdE1hdGNoMi5tYXRjaC5uYXRpdmVEZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvcE1hdGNoID0gITAsIHNldE1lcmdlTG9jYXRvcnMoYWx0TWF0Y2gyLCBhbHRNYXRjaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNTdWJzZXRPZihhbHRNYXRjaCwgYWx0TWF0Y2gyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNZXJnZUxvY2F0b3JzKGFsdE1hdGNoLCBhbHRNYXRjaDIpICYmIChkcm9wTWF0Y2ggPSAhMCwgbWFsdGVybmF0ZU1hdGNoZXMuc3BsaWNlKG1hbHRlcm5hdGVNYXRjaGVzLmluZGV4T2YoYWx0TWF0Y2gyKSwgMCwgYWx0TWF0Y2gpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1N1YnNldE9mKGFsdE1hdGNoMiwgYWx0TWF0Y2gpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1lcmdlTG9jYXRvcnMoYWx0TWF0Y2gyLCBhbHRNYXRjaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGljQ2FuTWF0Y2hEZWZpbml0aW9uKGFsdE1hdGNoLCBhbHRNYXRjaDIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2FtZUxldmVsKGFsdE1hdGNoLCBhbHRNYXRjaDIpIHx8IHZvaWQgMCAhPT0gZWwuaW5wdXRtYXNrLnVzZXJPcHRpb25zLmtlZXBTdGF0aWMgPyBzZXRNZXJnZUxvY2F0b3JzKGFsdE1hdGNoLCBhbHRNYXRjaDIpICYmIChkcm9wTWF0Y2ggPSAhMCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbHRlcm5hdGVNYXRjaGVzLnNwbGljZShtYWx0ZXJuYXRlTWF0Y2hlcy5pbmRleE9mKGFsdE1hdGNoMiksIDAsIGFsdE1hdGNoKSkgOiBvcHRzLmtlZXBTdGF0aWMgPSAhMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BNYXRjaCB8fCBtYWx0ZXJuYXRlTWF0Y2hlcy5wdXNoKGFsdE1hdGNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzID0gY3VycmVudE1hdGNoZXMuY29uY2F0KG1hbHRlcm5hdGVNYXRjaGVzKSwgdGVzdFBvcyA9IHBvcywgaW5zZXJ0U3RvcCA9IDAgPCBtYXRjaGVzLmxlbmd0aCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IDAgPCBtYWx0ZXJuYXRlTWF0Y2hlcy5sZW5ndGgsIG5keEluaXRpYWxpemVyID0gbmR4SW5pdGlhbGl6ZXJDbG9uZS5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgbWF0Y2ggPSBoYW5kbGVNYXRjaChhbHRlcm5hdGVUb2tlbi5tYXRjaGVzW2FsdEluZGV4XSB8fCBtYXNrVG9rZW4ubWF0Y2hlc1thbHRJbmRleF0sIFsgYWx0SW5kZXggXS5jb25jYXQobG9vcE5keCksIHF1YW50aWZpZXJSZWN1cnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKSByZXR1cm4gITA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaC5pc1F1YW50aWZpZXIgJiYgcXVhbnRpZmllclJlY3Vyc2UgIT09IG1hc2tUb2tlbi5tYXRjaGVzWyQuaW5BcnJheShtYXRjaCwgbWFza1Rva2VuLm1hdGNoZXMpIC0gMV0pIGZvciAodmFyIHF0ID0gbWF0Y2gsIHFuZHggPSAwIDwgbmR4SW5pdGlhbGl6ZXIubGVuZ3RoID8gbmR4SW5pdGlhbGl6ZXIuc2hpZnQoKSA6IDA7IHFuZHggPCAoaXNOYU4ocXQucXVhbnRpZmllci5tYXgpID8gcW5keCArIDEgOiBxdC5xdWFudGlmaWVyLm1heCkgJiYgdGVzdFBvcyA8PSBwb3M7IHFuZHgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW5Hcm91cCA9IG1hc2tUb2tlbi5tYXRjaGVzWyQuaW5BcnJheShxdCwgbWFza1Rva2VuLm1hdGNoZXMpIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IGhhbmRsZU1hdGNoKHRva2VuR3JvdXAsIFsgcW5keCBdLmNvbmNhdChsb29wTmR4KSwgdG9rZW5Hcm91cCksIG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGF0ZXN0TWF0Y2ggPSBtYXRjaGVzW21hdGNoZXMubGVuZ3RoIC0gMV0ubWF0Y2gsIGxhdGVzdE1hdGNoLm9wdGlvbmFsUXVhbnRpZmllciA9IHFuZHggPj0gcXQucXVhbnRpZmllci5taW4sIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0ZXN0TWF0Y2guaml0ID0gKHFuZHggfHwgMSkgKiB0b2tlbkdyb3VwLm1hdGNoZXMuaW5kZXhPZihsYXRlc3RNYXRjaCkgPj0gcXQucXVhbnRpZmllci5qaXQsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0ZXN0TWF0Y2gub3B0aW9uYWxRdWFudGlmaWVyICYmIGlzRmlyc3RNYXRjaChsYXRlc3RNYXRjaCwgdG9rZW5Hcm91cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRTdG9wID0gITAsIHRlc3RQb3MgPSBwb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGF0ZXN0TWF0Y2guaml0ICYmIChtYXNrc2V0LmppdE9mZnNldFtwb3NdID0gdG9rZW5Hcm91cC5tYXRjaGVzLmxlbmd0aCAtIHRva2VuR3JvdXAubWF0Y2hlcy5pbmRleE9mKGxhdGVzdE1hdGNoKSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgITA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoID0gcmVzb2x2ZVRlc3RGcm9tVG9rZW4obWF0Y2gsIG5keEluaXRpYWxpemVyLCBsb29wTmR4LCBxdWFudGlmaWVyUmVjdXJzZSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoKSByZXR1cm4gITA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgdGVzdFBvcysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHRuZHggPSAwIDwgbmR4SW5pdGlhbGl6ZXIubGVuZ3RoID8gbmR4SW5pdGlhbGl6ZXIuc2hpZnQoKSA6IDA7IHRuZHggPCBtYXNrVG9rZW4ubWF0Y2hlcy5sZW5ndGg7IHRuZHgrKykgaWYgKCEwICE9PSBtYXNrVG9rZW4ubWF0Y2hlc1t0bmR4XS5pc1F1YW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGhhbmRsZU1hdGNoKG1hc2tUb2tlbi5tYXRjaGVzW3RuZHhdLCBbIHRuZHggXS5jb25jYXQobG9vcE5keCksIHF1YW50aWZpZXJSZWN1cnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCAmJiB0ZXN0UG9zID09PSBwb3MpIHJldHVybiBtYXRjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3MgPCB0ZXN0UG9zKSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBtZXJnZUxvY2F0b3JzKHBvcywgdGVzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0b3IgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQuaXNBcnJheSh0ZXN0cykgfHwgKHRlc3RzID0gWyB0ZXN0cyBdKSwgMCA8IHRlc3RzLmxlbmd0aCAmJiAodm9pZCAwID09PSB0ZXN0c1swXS5hbHRlcm5hdGlvbiB8fCAhMCA9PT0gb3B0cy5rZWVwU3RhdGljID8gKGxvY2F0b3IgPSBkZXRlcm1pbmVUZXN0VGVtcGxhdGUocG9zLCB0ZXN0cy5zbGljZSgpKS5sb2NhdG9yLnNsaWNlKCksIFxuICAgICAgICAgICAgICAgICAgICAwID09PSBsb2NhdG9yLmxlbmd0aCAmJiAobG9jYXRvciA9IHRlc3RzWzBdLmxvY2F0b3Iuc2xpY2UoKSkpIDogJC5lYWNoKHRlc3RzLCBmdW5jdGlvbihuZHgsIHRzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFwiXCIgIT09IHRzdC5kZWYpIGlmICgwID09PSBsb2NhdG9yLmxlbmd0aCkgbG9jYXRvciA9IHRzdC5sb2NhdG9yLnNsaWNlKCk7IGVsc2UgZm9yICh2YXIgaSA9IDA7IGkgPCBsb2NhdG9yLmxlbmd0aDsgaSsrKSB0c3QubG9jYXRvcltpXSAmJiAtMSA9PT0gbG9jYXRvcltpXS50b1N0cmluZygpLmluZGV4T2YodHN0LmxvY2F0b3JbaV0pICYmIChsb2NhdG9yW2ldICs9IFwiLFwiICsgdHN0LmxvY2F0b3JbaV0pO1xuICAgICAgICAgICAgICAgICAgICB9KSksIGxvY2F0b3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgtMSA8IHBvcyAmJiAodm9pZCAwID09PSBtYXhMZW5ndGggfHwgcG9zIDwgbWF4TGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodm9pZCAwID09PSBuZHhJbnRsenIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHByZXZpb3VzUG9zID0gcG9zIC0gMSwgdGVzdDsgdm9pZCAwID09PSAodGVzdCA9IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcHJldmlvdXNQb3NdIHx8IG1hc2tzZXQudGVzdHNbcHJldmlvdXNQb3NdKSAmJiAtMSA8IHByZXZpb3VzUG9zOyApIHByZXZpb3VzUG9zLS07XG4gICAgICAgICAgICAgICAgICAgICAgICB2b2lkIDAgIT09IHRlc3QgJiYgLTEgPCBwcmV2aW91c1BvcyAmJiAobmR4SW5pdGlhbGl6ZXIgPSBtZXJnZUxvY2F0b3JzKHByZXZpb3VzUG9zLCB0ZXN0KSwgXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZURlcGVuZGVuY3kgPSBuZHhJbml0aWFsaXplci5qb2luKFwiXCIpLCB0ZXN0UG9zID0gcHJldmlvdXNQb3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXNrc2V0LnRlc3RzW3Bvc10gJiYgbWFza3NldC50ZXN0c1twb3NdWzBdLmNkID09PSBjYWNoZURlcGVuZGVuY3kpIHJldHVybiBtYXNrc2V0LnRlc3RzW3Bvc107XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG10bmR4ID0gbmR4SW5pdGlhbGl6ZXIuc2hpZnQoKTsgbXRuZHggPCBtYXNrVG9rZW5zLmxlbmd0aDsgbXRuZHgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gcmVzb2x2ZVRlc3RGcm9tVG9rZW4obWFza1Rva2Vuc1ttdG5keF0sIG5keEluaXRpYWxpemVyLCBbIG10bmR4IF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoICYmIHRlc3RQb3MgPT09IHBvcyB8fCBwb3MgPCB0ZXN0UG9zKSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gMCAhPT0gbWF0Y2hlcy5sZW5ndGggJiYgIWluc2VydFN0b3AgfHwgbWF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2g6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljOiAhMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsaXR5OiAhMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2luZzogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGxvY2F0b3I6IFtdLFxuICAgICAgICAgICAgICAgICAgICBtbG9jOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgY2Q6IGNhY2hlRGVwZW5kZW5jeVxuICAgICAgICAgICAgICAgIH0pLCB2b2lkIDAgIT09IG5keEludGx6ciAmJiBtYXNrc2V0LnRlc3RzW3Bvc10gPyAkLmV4dGVuZCghMCwgW10sIG1hdGNoZXMpIDogKG1hc2tzZXQudGVzdHNbcG9zXSA9ICQuZXh0ZW5kKCEwLCBbXSwgbWF0Y2hlcyksIFxuICAgICAgICAgICAgICAgIG1hc2tzZXQudGVzdHNbcG9zXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRCdWZmZXJUZW1wbGF0ZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAwID09PSBtYXNrc2V0Ll9idWZmZXIgJiYgKG1hc2tzZXQuX2J1ZmZlciA9IGdldE1hc2tUZW1wbGF0ZSghMSwgMSksIFxuICAgICAgICAgICAgICAgIHZvaWQgMCA9PT0gbWFza3NldC5idWZmZXIgJiYgKG1hc2tzZXQuYnVmZmVyID0gbWFza3NldC5fYnVmZmVyLnNsaWNlKCkpKSwgbWFza3NldC5fYnVmZmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0QnVmZmVyKG5vQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAwICE9PSBtYXNrc2V0LmJ1ZmZlciAmJiAhMCAhPT0gbm9DYWNoZSB8fCAobWFza3NldC5idWZmZXIgPSBnZXRNYXNrVGVtcGxhdGUoITAsIGdldExhc3RWYWxpZFBvc2l0aW9uKCksICEwKSwgXG4gICAgICAgICAgICAgICAgdm9pZCAwID09PSBtYXNrc2V0Ll9idWZmZXIgJiYgKG1hc2tzZXQuX2J1ZmZlciA9IG1hc2tzZXQuYnVmZmVyLnNsaWNlKCkpKSwgbWFza3NldC5idWZmZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWZyZXNoRnJvbUJ1ZmZlcihzdGFydCwgZW5kLCBidWZmZXIpIHtcbiAgICAgICAgICAgICAgICB2YXIgaSwgcCwgc2tpcE9wdGlvbmFsUGFydENoYXJhY3RlciA9IG9wdHMuc2tpcE9wdGlvbmFsUGFydENoYXJhY3RlciwgYmZmciA9IGlzUlRMID8gYnVmZmVyLnNsaWNlKCkucmV2ZXJzZSgpIDogYnVmZmVyO1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLnNraXBPcHRpb25hbFBhcnRDaGFyYWN0ZXIgPSBcIlwiLCAhMCA9PT0gc3RhcnQpIHJlc2V0TWFza1NldCgpLCBtYXNrc2V0LnRlc3RzID0ge30sIFxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gMCwgZW5kID0gYnVmZmVyLmxlbmd0aCwgcCA9IGRldGVybWluZU5ld0NhcmV0UG9zaXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogMCxcbiAgICAgICAgICAgICAgICAgICAgZW5kOiAwXG4gICAgICAgICAgICAgICAgfSwgITEpLmJlZ2luOyBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgZGVsZXRlIG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbaV07XG4gICAgICAgICAgICAgICAgICAgIHAgPSBzdGFydDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGtleXByZXNzID0gbmV3ICQuRXZlbnQoXCJrZXlwcmVzc1wiKTtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleXByZXNzLndoaWNoID0gYmZmcltpXS50b1N0cmluZygpLmNoYXJDb2RlQXQoMCksIGlnbm9yYWJsZSA9ICExO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsUmVzdWx0ID0gRXZlbnRIYW5kbGVycy5rZXlwcmVzc0V2ZW50LmNhbGwoZWwsIGtleXByZXNzLCAhMCwgITEsICExLCBwKTtcbiAgICAgICAgICAgICAgICAgICAgITEgIT09IHZhbFJlc3VsdCAmJiAocCA9IHZhbFJlc3VsdC5mb3J3YXJkUG9zaXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcHRzLnNraXBPcHRpb25hbFBhcnRDaGFyYWN0ZXIgPSBza2lwT3B0aW9uYWxQYXJ0Q2hhcmFjdGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gY2FzaW5nKGVsZW0sIHRlc3QsIHBvcykge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0cy5jYXNpbmcgfHwgdGVzdC5jYXNpbmcpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJ1cHBlclwiOlxuICAgICAgICAgICAgICAgICAgICBlbGVtID0gZWxlbS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgY2FzZSBcImxvd2VyXCI6XG4gICAgICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBjYXNlIFwidGl0bGVcIjpcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc0JlZm9yZSA9IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcG9zIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGVsZW0gPSAwID09PSBwb3MgfHwgcG9zQmVmb3JlICYmIHBvc0JlZm9yZS5pbnB1dCA9PT0gU3RyaW5nLmZyb21DaGFyQ29kZShrZXlDb2RlLlNQQUNFKSA/IGVsZW0udG9VcHBlckNhc2UoKSA6IGVsZW0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICgkLmlzRnVuY3Rpb24ob3B0cy5jYXNpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2gobWFza3NldC52YWxpZFBvc2l0aW9ucyksIGVsZW0gPSBvcHRzLmNhc2luZy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrQWx0ZXJuYXRpb25NYXRjaChhbHRBcnIxLCBhbHRBcnIyLCBuYSkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGFsdEFyckMgPSBvcHRzLmdyZWVkeSA/IGFsdEFycjIgOiBhbHRBcnIyLnNsaWNlKDAsIDEpLCBpc01hdGNoID0gITEsIG5hQXJyID0gdm9pZCAwICE9PSBuYSA/IG5hLnNwbGl0KFwiLFwiKSA6IFtdLCBuYU5keCwgaSA9IDA7IGkgPCBuYUFyci5sZW5ndGg7IGkrKykgLTEgIT09IChuYU5keCA9IGFsdEFycjEuaW5kZXhPZihuYUFycltpXSkpICYmIGFsdEFycjEuc3BsaWNlKG5hTmR4LCAxKTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhbG5keCA9IDA7IGFsbmR4IDwgYWx0QXJyMS5sZW5ndGg7IGFsbmR4KyspIGlmICgtMSAhPT0gJC5pbkFycmF5KGFsdEFycjFbYWxuZHhdLCBhbHRBcnJDKSkge1xuICAgICAgICAgICAgICAgICAgICBpc01hdGNoID0gITA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaXNNYXRjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGFsdGVybmF0ZShtYXNrUG9zLCBjLCBzdHJpY3QsIGZyb21Jc1ZhbGlkLCByQWx0UG9zLCBzZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsaWRQc0Nsb25lID0gJC5leHRlbmQoITAsIHt9LCBtYXNrc2V0LnZhbGlkUG9zaXRpb25zKSwgdHN0Q2xvbmUgPSAkLmV4dGVuZCghMCwge30sIG1hc2tzZXQudGVzdHMpLCBsYXN0QWx0LCBhbHRlcm5hdGlvbiwgaXNWYWxpZFJzbHQgPSAhMSwgcmV0dXJuUnNsdCA9ICExLCBhbHRQb3MsIHByZXZBbHRQb3MsIGksIHZhbGlkUG9zLCBkZWNpc2lvblBvcywgbEFsdFBvcyA9IHZvaWQgMCAhPT0gckFsdFBvcyA/IHJBbHRQb3MgOiBnZXRMYXN0VmFsaWRQb3NpdGlvbigpLCBuZXh0UG9zLCBpbnB1dCwgYmVnaW4sIGVuZDtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIChiZWdpbiA9IHNlbGVjdGlvbi5iZWdpbiwgZW5kID0gc2VsZWN0aW9uLmVuZCwgc2VsZWN0aW9uLmJlZ2luID4gc2VsZWN0aW9uLmVuZCAmJiAoYmVnaW4gPSBzZWxlY3Rpb24uZW5kLCBcbiAgICAgICAgICAgICAgICBlbmQgPSBzZWxlY3Rpb24uYmVnaW4pKSwgLTEgPT09IGxBbHRQb3MgJiYgdm9pZCAwID09PSByQWx0UG9zKSBsYXN0QWx0ID0gMCwgcHJldkFsdFBvcyA9IGdldFRlc3QobGFzdEFsdCksIFxuICAgICAgICAgICAgICAgIGFsdGVybmF0aW9uID0gcHJldkFsdFBvcy5hbHRlcm5hdGlvbjsgZWxzZSBmb3IgKDswIDw9IGxBbHRQb3M7IGxBbHRQb3MtLSkgaWYgKGFsdFBvcyA9IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbbEFsdFBvc10sIFxuICAgICAgICAgICAgICAgIGFsdFBvcyAmJiB2b2lkIDAgIT09IGFsdFBvcy5hbHRlcm5hdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJldkFsdFBvcyAmJiBwcmV2QWx0UG9zLmxvY2F0b3JbYWx0UG9zLmFsdGVybmF0aW9uXSAhPT0gYWx0UG9zLmxvY2F0b3JbYWx0UG9zLmFsdGVybmF0aW9uXSkgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RBbHQgPSBsQWx0UG9zLCBhbHRlcm5hdGlvbiA9IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbbGFzdEFsdF0uYWx0ZXJuYXRpb24sIHByZXZBbHRQb3MgPSBhbHRQb3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IGFsdGVybmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2lzaW9uUG9zID0gcGFyc2VJbnQobGFzdEFsdCksIG1hc2tzZXQuZXhjbHVkZXNbZGVjaXNpb25Qb3NdID0gbWFza3NldC5leGNsdWRlc1tkZWNpc2lvblBvc10gfHwgW10sIFxuICAgICAgICAgICAgICAgICAgICAhMCAhPT0gbWFza1BvcyAmJiBtYXNrc2V0LmV4Y2x1ZGVzW2RlY2lzaW9uUG9zXS5wdXNoKGdldERlY2lzaW9uVGFrZXIocHJldkFsdFBvcykgKyBcIjpcIiArIHByZXZBbHRQb3MuYWx0ZXJuYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsaWRJbnB1dHMgPSBbXSwgcmVzdWx0UG9zID0gLTE7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IGRlY2lzaW9uUG9zOyBpIDwgZ2V0TGFzdFZhbGlkUG9zaXRpb24odm9pZCAwLCAhMCkgKyAxOyBpKyspIC0xID09PSByZXN1bHRQb3MgJiYgbWFza1BvcyA8PSBpICYmIHZvaWQgMCAhPT0gYyAmJiAodmFsaWRJbnB1dHMucHVzaChjKSwgXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFBvcyA9IHZhbGlkSW5wdXRzLmxlbmd0aCAtIDEpLCB2YWxpZFBvcyA9IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbaV0sIHZhbGlkUG9zICYmICEwICE9PSB2YWxpZFBvcy5nZW5lcmF0ZWRJbnB1dCAmJiAodm9pZCAwID09PSBzZWxlY3Rpb24gfHwgaSA8IGJlZ2luIHx8IGVuZCA8PSBpKSAmJiB2YWxpZElucHV0cy5wdXNoKHZhbGlkUG9zLmlucHV0KSwgXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW2ldO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKC0xID09PSByZXN1bHRQb3MgJiYgdm9pZCAwICE9PSBjICYmICh2YWxpZElucHV0cy5wdXNoKGMpLCByZXN1bHRQb3MgPSB2YWxpZElucHV0cy5sZW5ndGggLSAxKTsgdm9pZCAwICE9PSBtYXNrc2V0LmV4Y2x1ZGVzW2RlY2lzaW9uUG9zXSAmJiBtYXNrc2V0LmV4Y2x1ZGVzW2RlY2lzaW9uUG9zXS5sZW5ndGggPCAxMDsgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG1hc2tzZXQudGVzdHMgPSB7fSwgcmVzZXRNYXNrU2V0KCEwKSwgaXNWYWxpZFJzbHQgPSAhMCwgaSA9IDA7IGkgPCB2YWxpZElucHV0cy5sZW5ndGggJiYgKG5leHRQb3MgPSBpc1ZhbGlkUnNsdC5jYXJldCB8fCBnZXRMYXN0VmFsaWRQb3NpdGlvbih2b2lkIDAsICEwKSArIDEsIFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSB2YWxpZElucHV0c1tpXSwgaXNWYWxpZFJzbHQgPSBpc1ZhbGlkKG5leHRQb3MsIGlucHV0LCAhMSwgZnJvbUlzVmFsaWQsICEwKSk7IGkrKykgaSA9PT0gcmVzdWx0UG9zICYmIChyZXR1cm5Sc2x0ID0gaXNWYWxpZFJzbHQpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gbWFza1BvcyAmJiBpc1ZhbGlkUnNsdCAmJiAocmV0dXJuUnNsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJldFBvczogaVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZFJzbHQpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc2V0TWFza1NldCgpLCBwcmV2QWx0UG9zID0gZ2V0VGVzdChkZWNpc2lvblBvcyksIG1hc2tzZXQudmFsaWRQb3NpdGlvbnMgPSAkLmV4dGVuZCghMCwge30sIHZhbGlkUHNDbG9uZSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFza3NldC50ZXN0cyA9ICQuZXh0ZW5kKCEwLCB7fSwgdHN0Q2xvbmUpLCAhbWFza3NldC5leGNsdWRlc1tkZWNpc2lvblBvc10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5Sc2x0ID0gYWx0ZXJuYXRlKG1hc2tQb3MsIGMsIHN0cmljdCwgZnJvbUlzVmFsaWQsIGRlY2lzaW9uUG9zIC0gMSwgc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNpc2lvblRha2VyID0gZ2V0RGVjaXNpb25UYWtlcihwcmV2QWx0UG9zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtMSAhPT0gbWFza3NldC5leGNsdWRlc1tkZWNpc2lvblBvc10uaW5kZXhPZihkZWNpc2lvblRha2VyICsgXCI6XCIgKyBwcmV2QWx0UG9zLmFsdGVybmF0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblJzbHQgPSBhbHRlcm5hdGUobWFza1BvcywgYywgc3RyaWN0LCBmcm9tSXNWYWxpZCwgZGVjaXNpb25Qb3MgLSAxLCBzZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChtYXNrc2V0LmV4Y2x1ZGVzW2RlY2lzaW9uUG9zXS5wdXNoKGRlY2lzaW9uVGFrZXIgKyBcIjpcIiArIHByZXZBbHRQb3MuYWx0ZXJuYXRpb24pLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBkZWNpc2lvblBvczsgaSA8IGdldExhc3RWYWxpZFBvc2l0aW9uKHZvaWQgMCwgITApICsgMTsgaSsrKSBkZWxldGUgbWFza3NldC52YWxpZFBvc2l0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuUnNsdCAmJiAhMSA9PT0gb3B0cy5rZWVwU3RhdGljIHx8IGRlbGV0ZSBtYXNrc2V0LmV4Y2x1ZGVzW2RlY2lzaW9uUG9zXSwgXG4gICAgICAgICAgICAgICAgcmV0dXJuUnNsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGlzVmFsaWQocG9zLCBjLCBzdHJpY3QsIGZyb21Jc1ZhbGlkLCBmcm9tQWx0ZXJuYXRlLCB2YWxpZGF0ZU9ubHkpIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc1NlbGVjdGlvbihwb3NPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzUlRMID8gMSA8IHBvc09iai5iZWdpbiAtIHBvc09iai5lbmQgfHwgcG9zT2JqLmJlZ2luIC0gcG9zT2JqLmVuZCA9PSAxIDogMSA8IHBvc09iai5lbmQgLSBwb3NPYmouYmVnaW4gfHwgcG9zT2JqLmVuZCAtIHBvc09iai5iZWdpbiA9PSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdHJpY3QgPSAhMCA9PT0gc3RyaWN0O1xuICAgICAgICAgICAgICAgIHZhciBtYXNrUG9zID0gcG9zO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NDb21tYW5kT2JqZWN0KGNvbW1hbmRPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gY29tbWFuZE9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gY29tbWFuZE9iai5yZW1vdmUgJiYgKCQuaXNBcnJheShjb21tYW5kT2JqLnJlbW92ZSkgfHwgKGNvbW1hbmRPYmoucmVtb3ZlID0gWyBjb21tYW5kT2JqLnJlbW92ZSBdKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAkLmVhY2goY29tbWFuZE9iai5yZW1vdmUuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGIucG9zIC0gYS5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSwgZnVuY3Rpb24obmR4LCBsbW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2YWxpZGF0ZU1hc2soe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbjogbG1udCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBsbW50ICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksIGNvbW1hbmRPYmoucmVtb3ZlID0gdm9pZCAwKSwgdm9pZCAwICE9PSBjb21tYW5kT2JqLmluc2VydCAmJiAoJC5pc0FycmF5KGNvbW1hbmRPYmouaW5zZXJ0KSB8fCAoY29tbWFuZE9iai5pbnNlcnQgPSBbIGNvbW1hbmRPYmouaW5zZXJ0IF0pLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChjb21tYW5kT2JqLmluc2VydC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5wb3MgLSBiLnBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLCBmdW5jdGlvbihuZHgsIGxtbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlwiICE9PSBsbW50LmMgJiYgaXNWYWxpZChsbW50LnBvcywgbG1udC5jLCB2b2lkIDAgPT09IGxtbnQuc3RyaWN0IHx8IGxtbnQuc3RyaWN0LCB2b2lkIDAgIT09IGxtbnQuZnJvbUlzVmFsaWQgPyBsbW50LmZyb21Jc1ZhbGlkIDogZnJvbUlzVmFsaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksIGNvbW1hbmRPYmouaW5zZXJ0ID0gdm9pZCAwKSwgY29tbWFuZE9iai5yZWZyZXNoRnJvbUJ1ZmZlciAmJiBjb21tYW5kT2JqLmJ1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWZyZXNoID0gY29tbWFuZE9iai5yZWZyZXNoRnJvbUJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoRnJvbUJ1ZmZlcighMCA9PT0gcmVmcmVzaCA/IHJlZnJlc2ggOiByZWZyZXNoLnN0YXJ0LCByZWZyZXNoLmVuZCwgY29tbWFuZE9iai5idWZmZXIpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kT2JqLnJlZnJlc2hGcm9tQnVmZmVyID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAwICE9PSBjb21tYW5kT2JqLnJld3JpdGVQb3NpdGlvbiAmJiAobWFza1BvcyA9IGNvbW1hbmRPYmoucmV3cml0ZVBvc2l0aW9uLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRPYmogPSAhMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmRPYmo7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pc1ZhbGlkKHBvc2l0aW9uLCBjLCBzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJzbHQgPSAhMTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQuZWFjaChnZXRUZXN0cyhwb3NpdGlvbiksIGZ1bmN0aW9uKG5keCwgdHN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVzdCA9IHRzdC5tYXRjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRCdWZmZXIoITApLCByc2x0ID0gbnVsbCAhPSB0ZXN0LmZuID8gdGVzdC5mbi50ZXN0KGMsIG1hc2tzZXQsIHBvc2l0aW9uLCBzdHJpY3QsIG9wdHMsIGlzU2VsZWN0aW9uKHBvcykpIDogKGMgPT09IHRlc3QuZGVmIHx8IGMgPT09IG9wdHMuc2tpcE9wdGlvbmFsUGFydENoYXJhY3RlcikgJiYgXCJcIiAhPT0gdGVzdC5kZWYgJiYge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IGdldFBsYWNlaG9sZGVyKHBvc2l0aW9uLCB0ZXN0LCAhMCkgfHwgdGVzdC5kZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zOiBwb3NpdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgITEgIT09IHJzbHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IHZvaWQgMCAhPT0gcnNsdC5jID8gcnNsdC5jIDogYywgdmFsaWRhdGVkUG9zID0gcG9zaXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0gPSBlbGVtID09PSBvcHRzLnNraXBPcHRpb25hbFBhcnRDaGFyYWN0ZXIgJiYgITAgPT09IHRlc3Quc3RhdGljID8gZ2V0UGxhY2Vob2xkZXIocG9zaXRpb24sIHRlc3QsICEwKSB8fCB0ZXN0LmRlZiA6IGVsZW0sIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzbHQgPSBwcm9jZXNzQ29tbWFuZE9iamVjdChyc2x0KSwgITAgIT09IHJzbHQgJiYgdm9pZCAwICE9PSByc2x0LnBvcyAmJiByc2x0LnBvcyAhPT0gcG9zaXRpb24gJiYgKHZhbGlkYXRlZFBvcyA9IHJzbHQucG9zKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgITAgIT09IHJzbHQgJiYgdm9pZCAwID09PSByc2x0LnBvcyAmJiB2b2lkIDAgPT09IHJzbHQuYyA/ICExIDogKCExID09PSByZXZhbGlkYXRlTWFzayhwb3MsICQuZXh0ZW5kKHt9LCB0c3QsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGNhc2luZyhlbGVtLCB0ZXN0LCB2YWxpZGF0ZWRQb3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksIGZyb21Jc1ZhbGlkLCB2YWxpZGF0ZWRQb3MpICYmIChyc2x0ID0gITEpLCAhMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLCByc2x0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2b2lkIDAgIT09IHBvcy5iZWdpbiAmJiAobWFza1BvcyA9IGlzUlRMID8gcG9zLmVuZCA6IHBvcy5iZWdpbik7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICEwLCBwb3NpdGlvbnNDbG9uZSA9ICQuZXh0ZW5kKCEwLCB7fSwgbWFza3NldC52YWxpZFBvc2l0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKCExID09PSBvcHRzLmtlZXBTdGF0aWMgJiYgdm9pZCAwICE9PSBtYXNrc2V0LmV4Y2x1ZGVzW21hc2tQb3NdICYmICEwICE9PSBmcm9tQWx0ZXJuYXRlICYmICEwICE9PSBmcm9tSXNWYWxpZCkgZm9yICh2YXIgaSA9IG1hc2tQb3M7IGkgPCAoaXNSVEwgPyBwb3MuYmVnaW4gOiBwb3MuZW5kKTsgaSsrKSB2b2lkIDAgIT09IG1hc2tzZXQuZXhjbHVkZXNbaV0gJiYgKG1hc2tzZXQuZXhjbHVkZXNbaV0gPSB2b2lkIDAsIFxuICAgICAgICAgICAgICAgIGRlbGV0ZSBtYXNrc2V0LnRlc3RzW2ldKTtcbiAgICAgICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKG9wdHMucHJlVmFsaWRhdGlvbikgJiYgITAgIT09IGZyb21Jc1ZhbGlkICYmICEwICE9PSB2YWxpZGF0ZU9ubHkgJiYgKHJlc3VsdCA9IG9wdHMucHJlVmFsaWRhdGlvbi5jYWxsKGVsLCBnZXRCdWZmZXIoKSwgbWFza1BvcywgYywgaXNTZWxlY3Rpb24ocG9zKSwgb3B0cywgbWFza3NldCwgcG9zLCBzdHJpY3QgfHwgZnJvbUFsdGVybmF0ZSksIFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHByb2Nlc3NDb21tYW5kT2JqZWN0KHJlc3VsdCkpLCAhMCA9PT0gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgPT09IG1heExlbmd0aCB8fCBtYXNrUG9zIDwgbWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID0gX2lzVmFsaWQobWFza1BvcywgYywgc3RyaWN0KSwgKCFzdHJpY3QgfHwgITAgPT09IGZyb21Jc1ZhbGlkKSAmJiAhMSA9PT0gcmVzdWx0ICYmICEwICE9PSB2YWxpZGF0ZU9ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudFBvc1ZhbGlkID0gbWFza3NldC52YWxpZFBvc2l0aW9uc1ttYXNrUG9zXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRQb3NWYWxpZCB8fCAhMCAhPT0gY3VycmVudFBvc1ZhbGlkLm1hdGNoLnN0YXRpYyB8fCBjdXJyZW50UG9zVmFsaWQubWF0Y2guZGVmICE9PSBjICYmIGMgIT09IG9wdHMuc2tpcE9wdGlvbmFsUGFydENoYXJhY3Rlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5pbnNlcnRNb2RlIHx8IHZvaWQgMCA9PT0gbWFza3NldC52YWxpZFBvc2l0aW9uc1tzZWVrTmV4dChtYXNrUG9zKV0gfHwgcG9zLmVuZCA+IG1hc2tQb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBza2lwID0gITE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFza3NldC5qaXRPZmZzZXRbbWFza1Bvc10gJiYgdm9pZCAwID09PSBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW3NlZWtOZXh0KG1hc2tQb3MpXSAmJiAocmVzdWx0ID0gaXNWYWxpZChtYXNrUG9zICsgbWFza3NldC5qaXRPZmZzZXRbbWFza1Bvc10sIGMsICEwKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhMSAhPT0gcmVzdWx0ICYmICghMCAhPT0gZnJvbUFsdGVybmF0ZSAmJiAocmVzdWx0LmNhcmV0ID0gbWFza1BvcyksIHNraXAgPSAhMCkpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcy5lbmQgPiBtYXNrUG9zICYmIChtYXNrc2V0LnZhbGlkUG9zaXRpb25zW21hc2tQb3NdID0gdm9pZCAwKSwgIXNraXAgJiYgIWlzTWFzayhtYXNrUG9zLCBvcHRzLmtlZXBTdGF0aWMpKSBmb3IgKHZhciBuUG9zID0gbWFza1BvcyArIDEsIHNuUG9zID0gc2Vla05leHQobWFza1Bvcyk7IG5Qb3MgPD0gc25Qb3M7IG5Qb3MrKykgaWYgKHJlc3VsdCA9IF9pc1ZhbGlkKG5Qb3MsIGMsIHN0cmljdCksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgITEgIT09IHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRyYWNrYmFja1Bvc2l0aW9ucyhtYXNrUG9zLCB2b2lkIDAgIT09IHJlc3VsdC5wb3MgPyByZXN1bHQucG9zIDogblBvcykgfHwgcmVzdWx0LCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrUG9zID0gblBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmV0OiBzZWVrTmV4dChtYXNrUG9zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSByZXN1bHQgPSAhMTtcbiAgICAgICAgICAgICAgICAgICAgITEgIT09IHJlc3VsdCB8fCAhb3B0cy5rZWVwU3RhdGljIHx8ICFpc0NvbXBsZXRlKGdldEJ1ZmZlcigpKSAmJiAwICE9PSBtYXNrUG9zIHx8IHN0cmljdCB8fCAhMCA9PT0gZnJvbUFsdGVybmF0ZSA/IGlzU2VsZWN0aW9uKHBvcykgJiYgbWFza3NldC50ZXN0c1ttYXNrUG9zXSAmJiAxIDwgbWFza3NldC50ZXN0c1ttYXNrUG9zXS5sZW5ndGggJiYgb3B0cy5rZWVwU3RhdGljICYmICFzdHJpY3QgJiYgITAgIT09IGZyb21BbHRlcm5hdGUgJiYgKHJlc3VsdCA9IGFsdGVybmF0ZSghMCkpIDogcmVzdWx0ID0gYWx0ZXJuYXRlKG1hc2tQb3MsIGMsIHN0cmljdCwgZnJvbUlzVmFsaWQsIHZvaWQgMCwgcG9zKSwgXG4gICAgICAgICAgICAgICAgICAgICEwID09PSByZXN1bHQgJiYgKHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvczogbWFza1Bvc1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCQuaXNGdW5jdGlvbihvcHRzLnBvc3RWYWxpZGF0aW9uKSAmJiAhMCAhPT0gZnJvbUlzVmFsaWQgJiYgITAgIT09IHZhbGlkYXRlT25seSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zdFJlc3VsdCA9IG9wdHMucG9zdFZhbGlkYXRpb24uY2FsbChlbCwgZ2V0QnVmZmVyKCEwKSwgdm9pZCAwICE9PSBwb3MuYmVnaW4gPyBpc1JUTCA/IHBvcy5lbmQgOiBwb3MuYmVnaW4gOiBwb3MsIGMsIHJlc3VsdCwgb3B0cywgbWFza3NldCwgc3RyaWN0KTtcbiAgICAgICAgICAgICAgICAgICAgdm9pZCAwICE9PSBwb3N0UmVzdWx0ICYmIChyZXN1bHQgPSAhMCA9PT0gcG9zdFJlc3VsdCA/IHJlc3VsdCA6IHBvc3RSZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgJiYgdm9pZCAwID09PSByZXN1bHQucG9zICYmIChyZXN1bHQucG9zID0gbWFza1BvcyksICExID09PSByZXN1bHQgfHwgITAgPT09IHZhbGlkYXRlT25seSA/IChyZXNldE1hc2tTZXQoITApLCBcbiAgICAgICAgICAgICAgICBtYXNrc2V0LnZhbGlkUG9zaXRpb25zID0gJC5leHRlbmQoITAsIHt9LCBwb3NpdGlvbnNDbG9uZSkpIDogdHJhY2tiYWNrUG9zaXRpb25zKHZvaWQgMCwgbWFza1BvcywgITApO1xuICAgICAgICAgICAgICAgIHZhciBlbmRSZXN1bHQgPSBwcm9jZXNzQ29tbWFuZE9iamVjdChyZXN1bHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlbmRSZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiB0cmFja2JhY2tQb3NpdGlvbnMob3JpZ2luYWxQb3MsIG5ld1BvcywgZmlsbE9ubHkpIHtcbiAgICAgICAgICAgICAgICBpZiAodm9pZCAwID09PSBvcmlnaW5hbFBvcykgZm9yIChvcmlnaW5hbFBvcyA9IG5ld1BvcyAtIDE7IDAgPCBvcmlnaW5hbFBvcyAmJiAhbWFza3NldC52YWxpZFBvc2l0aW9uc1tvcmlnaW5hbFBvc107IG9yaWdpbmFsUG9zLS0pIDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBwcyA9IG9yaWdpbmFsUG9zOyBwcyA8IG5ld1BvczsgcHMrKykgaWYgKHZvaWQgMCA9PT0gbWFza3NldC52YWxpZFBvc2l0aW9uc1twc10gJiYgIWlzTWFzayhwcywgITApKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2cCA9IDAgPT0gcHMgPyBnZXRUZXN0KHBzKSA6IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcHMgLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVzdHMgPSBnZXRUZXN0cyhwcykuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXCIgPT09IHRlc3RzW3Rlc3RzLmxlbmd0aCAtIDFdLm1hdGNoLmRlZiAmJiB0ZXN0cy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiZXN0TWF0Y2ggPSBkZXRlcm1pbmVUZXN0VGVtcGxhdGUocHMsIHRlc3RzKSwgbnA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmVzdE1hdGNoICYmICghMCAhPT0gYmVzdE1hdGNoLm1hdGNoLmppdCB8fCBcIm1hc3RlclwiID09PSBiZXN0TWF0Y2gubWF0Y2gubmV3QmxvY2tNYXJrZXIgJiYgKG5wID0gbWFza3NldC52YWxpZFBvc2l0aW9uc1twcyArIDFdKSAmJiAhMCA9PT0gbnAubWF0Y2gub3B0aW9uYWxRdWFudGlmaWVyKSAmJiAoYmVzdE1hdGNoID0gJC5leHRlbmQoe30sIGJlc3RNYXRjaCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBnZXRQbGFjZWhvbGRlcihwcywgYmVzdE1hdGNoLm1hdGNoLCAhMCkgfHwgYmVzdE1hdGNoLm1hdGNoLmRlZlxuICAgICAgICAgICAgICAgICAgICAgICAgfSksIGJlc3RNYXRjaC5nZW5lcmF0ZWRJbnB1dCA9ICEwLCByZXZhbGlkYXRlTWFzayhwcywgYmVzdE1hdGNoLCAhMCksICEwICE9PSBmaWxsT25seSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3ZwSW5wdXQgPSBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW25ld1Bvc10uaW5wdXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbbmV3UG9zXSA9IHZvaWQgMCwgaXNWYWxpZChuZXdQb3MsIGN2cElucHV0LCAhMCwgITApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gcmV2YWxpZGF0ZU1hc2socG9zLCB2YWxpZFRlc3QsIGZyb21Jc1ZhbGlkLCB2YWxpZGF0ZWRQb3MpIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc0VuY2xvc2VkU3RhdGljKHBvcywgdmFsaWRzLCBzZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc01hdGNoID0gdmFsaWRzW3Bvc107XG4gICAgICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgPT09IHBvc01hdGNoIHx8ICEwICE9PSBwb3NNYXRjaC5tYXRjaC5zdGF0aWMgfHwgITAgPT09IHBvc01hdGNoLm1hdGNoLm9wdGlvbmFsaXR5IHx8IHZvaWQgMCAhPT0gdmFsaWRzWzBdICYmIHZvaWQgMCAhPT0gdmFsaWRzWzBdLmFsdGVybmF0aW9uKSByZXR1cm4gITE7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcmV2TWF0Y2ggPSBzZWxlY3Rpb24uYmVnaW4gPD0gcG9zIC0gMSA/IHZhbGlkc1twb3MgLSAxXSAmJiAhMCA9PT0gdmFsaWRzW3BvcyAtIDFdLm1hdGNoLnN0YXRpYyAmJiB2YWxpZHNbcG9zIC0gMV0gOiB2YWxpZHNbcG9zIC0gMV0sIG5leHRNYXRjaCA9IHNlbGVjdGlvbi5lbmQgPiBwb3MgKyAxID8gdmFsaWRzW3BvcyArIDFdICYmICEwID09PSB2YWxpZHNbcG9zICsgMV0ubWF0Y2guc3RhdGljICYmIHZhbGlkc1twb3MgKyAxXSA6IHZhbGlkc1twb3MgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZNYXRjaCAmJiBuZXh0TWF0Y2g7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwLCBiZWdpbiA9IHZvaWQgMCAhPT0gcG9zLmJlZ2luID8gcG9zLmJlZ2luIDogcG9zLCBlbmQgPSB2b2lkIDAgIT09IHBvcy5lbmQgPyBwb3MuZW5kIDogcG9zO1xuICAgICAgICAgICAgICAgIGlmIChwb3MuYmVnaW4gPiBwb3MuZW5kICYmIChiZWdpbiA9IHBvcy5lbmQsIGVuZCA9IHBvcy5iZWdpbiksIHZhbGlkYXRlZFBvcyA9IHZvaWQgMCAhPT0gdmFsaWRhdGVkUG9zID8gdmFsaWRhdGVkUG9zIDogYmVnaW4sIFxuICAgICAgICAgICAgICAgIGJlZ2luICE9PSBlbmQgfHwgb3B0cy5pbnNlcnRNb2RlICYmIHZvaWQgMCAhPT0gbWFza3NldC52YWxpZFBvc2l0aW9uc1t2YWxpZGF0ZWRQb3NdICYmIHZvaWQgMCA9PT0gZnJvbUlzVmFsaWQgfHwgdm9pZCAwID09PSB2YWxpZFRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uc0Nsb25lID0gJC5leHRlbmQoITAsIHt9LCBtYXNrc2V0LnZhbGlkUG9zaXRpb25zKSwgbHZwID0gZ2V0TGFzdFZhbGlkUG9zaXRpb24odm9pZCAwLCAhMCksIGk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobWFza3NldC5wID0gYmVnaW4sIGkgPSBsdnA7IGJlZ2luIDw9IGk7IGktLSkgZGVsZXRlIG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbaV0sIFxuICAgICAgICAgICAgICAgICAgICB2b2lkIDAgPT09IHZhbGlkVGVzdCAmJiBkZWxldGUgbWFza3NldC50ZXN0c1tpICsgMV07XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWxpZCA9ICEwLCBqID0gdmFsaWRhdGVkUG9zLCBwb3NNYXRjaCA9IGosIHQsIGNhbk1hdGNoO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhbGlkVGVzdCAmJiAobWFza3NldC52YWxpZFBvc2l0aW9uc1t2YWxpZGF0ZWRQb3NdID0gJC5leHRlbmQoITAsIHt9LCB2YWxpZFRlc3QpLCBcbiAgICAgICAgICAgICAgICAgICAgcG9zTWF0Y2grKywgaisrKSwgaSA9IHZhbGlkVGVzdCA/IGVuZCA6IGVuZCAtIDE7IGkgPD0gbHZwOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgIT09ICh0ID0gcG9zaXRpb25zQ2xvbmVbaV0pICYmICEwICE9PSB0LmdlbmVyYXRlZElucHV0ICYmIChlbmQgPD0gaSB8fCBiZWdpbiA8PSBpICYmIElzRW5jbG9zZWRTdGF0aWMoaSwgcG9zaXRpb25zQ2xvbmUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbjogYmVnaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBlbmRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoO1wiXCIgIT09IGdldFRlc3QocG9zTWF0Y2gpLm1hdGNoLmRlZjsgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghMSAhPT0gKGNhbk1hdGNoID0gcG9zaXRpb25DYW5NYXRjaERlZmluaXRpb24ocG9zTWF0Y2gsIHQsIG9wdHMpKSB8fCBcIitcIiA9PT0gdC5tYXRjaC5kZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiK1wiID09PSB0Lm1hdGNoLmRlZiAmJiBnZXRCdWZmZXIoITApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGlzVmFsaWQocG9zTWF0Y2gsIHQuaW5wdXQsIFwiK1wiICE9PSB0Lm1hdGNoLmRlZiwgXCIrXCIgIT09IHQubWF0Y2guZGVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZCA9ICExICE9PSByZXN1bHQsIGogPSAocmVzdWx0LnBvcyB8fCBwb3NNYXRjaCkgKyAxLCAhdmFsaWQgJiYgY2FuTWF0Y2gpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgdmFsaWQgPSAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIDAgPT09IHZhbGlkVGVzdCAmJiB0Lm1hdGNoLnN0YXRpYyAmJiBpID09PSBwb3MuYmVnaW4gJiYgb2Zmc2V0Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkICYmIHBvc01hdGNoID4gbWFza3NldC5tYXNrTGVuZ3RoKSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zTWF0Y2grKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcIiA9PSBnZXRUZXN0KHBvc01hdGNoKS5tYXRjaC5kZWYgJiYgKHZhbGlkID0gITEpLCBwb3NNYXRjaCA9IGo7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkKSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkKSByZXR1cm4gbWFza3NldC52YWxpZFBvc2l0aW9ucyA9ICQuZXh0ZW5kKCEwLCB7fSwgcG9zaXRpb25zQ2xvbmUpLCByZXNldE1hc2tTZXQoITApLCBcbiAgICAgICAgICAgICAgICAgICAgITE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHZhbGlkVGVzdCAmJiBnZXRUZXN0KHZhbGlkYXRlZFBvcykubWF0Y2guY2QgPT09IHZhbGlkVGVzdC5tYXRjaC5jZCAmJiAobWFza3NldC52YWxpZFBvc2l0aW9uc1t2YWxpZGF0ZWRQb3NdID0gJC5leHRlbmQoITAsIHt9LCB2YWxpZFRlc3QpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzZXRNYXNrU2V0KCEwKSwgb2Zmc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXNNYXNrKHBvcywgc3RyaWN0LCBmdXp6eSkge1xuICAgICAgICAgICAgICAgIHZhciB0ZXN0ID0gZ2V0VGVzdFRlbXBsYXRlKHBvcykubWF0Y2g7XG4gICAgICAgICAgICAgICAgaWYgKFwiXCIgPT09IHRlc3QuZGVmICYmICh0ZXN0ID0gZ2V0VGVzdChwb3MpLm1hdGNoKSwgITAgIT09IHRlc3Quc3RhdGljKSByZXR1cm4gdGVzdC5mbjtcbiAgICAgICAgICAgICAgICBpZiAoITAgPT09IGZ1enp5ICYmIHZvaWQgMCAhPT0gbWFza3NldC52YWxpZFBvc2l0aW9uc1twb3NdICYmICEwICE9PSBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW3Bvc10uZ2VuZXJhdGVkSW5wdXQpIHJldHVybiAhMDtcbiAgICAgICAgICAgICAgICBpZiAoITAgIT09IHN0cmljdCAmJiAtMSA8IHBvcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZnV6enkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXN0cyA9IGdldFRlc3RzKHBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVzdHMubGVuZ3RoID4gMSArIChcIlwiID09PSB0ZXN0c1t0ZXN0cy5sZW5ndGggLSAxXS5tYXRjaC5kZWYgPyAxIDogMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIHRlc3RUZW1wbGF0ZSA9IGRldGVybWluZVRlc3RUZW1wbGF0ZShwb3MsIGdldFRlc3RzKHBvcykpLCB0ZXN0UGxhY2VIb2xkZXIgPSBnZXRQbGFjZWhvbGRlcihwb3MsIHRlc3RUZW1wbGF0ZS5tYXRjaCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0VGVtcGxhdGUubWF0Y2guZGVmICE9PSB0ZXN0UGxhY2VIb2xkZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHNlZWtOZXh0KHBvcywgbmV3QmxvY2ssIGZ1enp5KSB7XG4gICAgICAgICAgICAgICAgdm9pZCAwID09PSBmdXp6eSAmJiAoZnV6enkgPSAhMCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgcG9zaXRpb24gPSBwb3MgKyAxOyBcIlwiICE9PSBnZXRUZXN0KHBvc2l0aW9uKS5tYXRjaC5kZWYgJiYgKCEwID09PSBuZXdCbG9jayAmJiAoITAgIT09IGdldFRlc3QocG9zaXRpb24pLm1hdGNoLm5ld0Jsb2NrTWFya2VyIHx8ICFpc01hc2socG9zaXRpb24sIHZvaWQgMCwgITApKSB8fCAhMCAhPT0gbmV3QmxvY2sgJiYgIWlzTWFzayhwb3NpdGlvbiwgdm9pZCAwLCBmdXp6eSkpOyApIHBvc2l0aW9uKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gc2Vla1ByZXZpb3VzKHBvcywgbmV3QmxvY2spIHtcbiAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBwb3MsIHRlc3RzO1xuICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8PSAwKSByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICBmb3IgKDswIDwgLS1wb3NpdGlvbiAmJiAoITAgPT09IG5ld0Jsb2NrICYmICEwICE9PSBnZXRUZXN0KHBvc2l0aW9uKS5tYXRjaC5uZXdCbG9ja01hcmtlciB8fCAhMCAhPT0gbmV3QmxvY2sgJiYgIWlzTWFzayhwb3NpdGlvbiwgdm9pZCAwLCAhMCkgJiYgKHRlc3RzID0gZ2V0VGVzdHMocG9zaXRpb24pLCBcbiAgICAgICAgICAgICAgICB0ZXN0cy5sZW5ndGggPCAyIHx8IDIgPT09IHRlc3RzLmxlbmd0aCAmJiBcIlwiID09PSB0ZXN0c1sxXS5tYXRjaC5kZWYpKTsgKSA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gd3JpdGVCdWZmZXIoaW5wdXQsIGJ1ZmZlciwgY2FyZXRQb3MsIGV2ZW50LCB0cmlnZ2VyRXZlbnRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50ICYmICQuaXNGdW5jdGlvbihvcHRzLm9uQmVmb3JlV3JpdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBvcHRzLm9uQmVmb3JlV3JpdGUuY2FsbChpbnB1dG1hc2ssIGV2ZW50LCBidWZmZXIsIGNhcmV0UG9zLCBvcHRzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZWZyZXNoRnJvbUJ1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWZyZXNoID0gcmVzdWx0LnJlZnJlc2hGcm9tQnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hGcm9tQnVmZmVyKCEwID09PSByZWZyZXNoID8gcmVmcmVzaCA6IHJlZnJlc2guc3RhcnQsIHJlZnJlc2guZW5kLCByZXN1bHQuYnVmZmVyIHx8IGJ1ZmZlciksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGdldEJ1ZmZlcighMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB2b2lkIDAgIT09IGNhcmV0UG9zICYmIChjYXJldFBvcyA9IHZvaWQgMCAhPT0gcmVzdWx0LmNhcmV0ID8gcmVzdWx0LmNhcmV0IDogY2FyZXRQb3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IGlucHV0ICYmIChpbnB1dC5pbnB1dG1hc2suX3ZhbHVlU2V0KGJ1ZmZlci5qb2luKFwiXCIpKSwgdm9pZCAwID09PSBjYXJldFBvcyB8fCB2b2lkIDAgIT09IGV2ZW50ICYmIFwiYmx1clwiID09PSBldmVudC50eXBlIHx8IGNhcmV0KGlucHV0LCBjYXJldFBvcywgdm9pZCAwLCB2b2lkIDAsIHZvaWQgMCAhPT0gZXZlbnQgJiYgXCJrZXlkb3duXCIgPT09IGV2ZW50LnR5cGUgJiYgKGV2ZW50LmtleUNvZGUgPT09IGtleUNvZGUuREVMRVRFIHx8IGV2ZW50LmtleUNvZGUgPT09IGtleUNvZGUuQkFDS1NQQUNFKSksIFxuICAgICAgICAgICAgICAgICEwID09PSB0cmlnZ2VyRXZlbnRzKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJGlucHV0ID0gJChpbnB1dCksIG5wdFZhbCA9IGlucHV0LmlucHV0bWFzay5fdmFsdWVHZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgc2tpcElucHV0RXZlbnQgPSAhMCwgJGlucHV0LnRyaWdnZXIoXCJpbnB1dFwiKSwgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5wdFZhbCA9PT0gZ2V0QnVmZmVyVGVtcGxhdGUoKS5qb2luKFwiXCIpID8gJGlucHV0LnRyaWdnZXIoXCJjbGVhcmVkXCIpIDogITAgPT09IGlzQ29tcGxldGUoYnVmZmVyKSAmJiAkaW5wdXQudHJpZ2dlcihcImNvbXBsZXRlXCIpO1xuICAgICAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRQbGFjZWhvbGRlcihwb3MsIHRlc3QsIHJldHVyblBMKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRlc3QgPSB0ZXN0IHx8IGdldFRlc3QocG9zKS5tYXRjaCwgdm9pZCAwICE9PSB0ZXN0LnBsYWNlaG9sZGVyIHx8ICEwID09PSByZXR1cm5QTCkgcmV0dXJuICQuaXNGdW5jdGlvbih0ZXN0LnBsYWNlaG9sZGVyKSA/IHRlc3QucGxhY2Vob2xkZXIob3B0cykgOiB0ZXN0LnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgIGlmICghMCAhPT0gdGVzdC5zdGF0aWMpIHJldHVybiBvcHRzLnBsYWNlaG9sZGVyLmNoYXJBdChwb3MgJSBvcHRzLnBsYWNlaG9sZGVyLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgaWYgKC0xIDwgcG9zICYmIHZvaWQgMCA9PT0gbWFza3NldC52YWxpZFBvc2l0aW9uc1twb3NdKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZXN0cyA9IGdldFRlc3RzKHBvcyksIHN0YXRpY0FsdGVybmF0aW9ucyA9IFtdLCBwcmV2VGVzdDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlc3RzLmxlbmd0aCA+IDEgKyAoXCJcIiA9PT0gdGVzdHNbdGVzdHMubGVuZ3RoIC0gMV0ubWF0Y2guZGVmID8gMSA6IDApKSBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgaSsrKSBpZiAoXCJcIiAhPT0gdGVzdHNbaV0ubWF0Y2guZGVmICYmICEwICE9PSB0ZXN0c1tpXS5tYXRjaC5vcHRpb25hbGl0eSAmJiAhMCAhPT0gdGVzdHNbaV0ubWF0Y2gub3B0aW9uYWxRdWFudGlmaWVyICYmICghMCA9PT0gdGVzdHNbaV0ubWF0Y2guc3RhdGljIHx8IHZvaWQgMCA9PT0gcHJldlRlc3QgfHwgITEgIT09IHRlc3RzW2ldLm1hdGNoLmZuLnRlc3QocHJldlRlc3QubWF0Y2guZGVmLCBtYXNrc2V0LCBwb3MsICEwLCBvcHRzKSkgJiYgKHN0YXRpY0FsdGVybmF0aW9ucy5wdXNoKHRlc3RzW2ldKSwgXG4gICAgICAgICAgICAgICAgICAgICEwID09PSB0ZXN0c1tpXS5tYXRjaC5zdGF0aWMgJiYgKHByZXZUZXN0ID0gdGVzdHNbaV0pLCAxIDwgc3RhdGljQWx0ZXJuYXRpb25zLmxlbmd0aCAmJiAvWzAtOWEtYkEtWl0vLnRlc3Qoc3RhdGljQWx0ZXJuYXRpb25zWzBdLm1hdGNoLmRlZikpKSByZXR1cm4gb3B0cy5wbGFjZWhvbGRlci5jaGFyQXQocG9zICUgb3B0cy5wbGFjZWhvbGRlci5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGVzdC5kZWY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBIYW5kbGVOYXRpdmVQbGFjZWhvbGRlcihucHQsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGllKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChucHQuaW5wdXRtYXNrLl92YWx1ZUdldCgpICE9PSB2YWx1ZSAmJiAobnB0LnBsYWNlaG9sZGVyICE9PSB2YWx1ZSB8fCBcIlwiID09PSBucHQucGxhY2Vob2xkZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gZ2V0QnVmZmVyKCkuc2xpY2UoKSwgbnB0VmFsdWUgPSBucHQuaW5wdXRtYXNrLl92YWx1ZUdldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5wdFZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsdnAgPSBnZXRMYXN0VmFsaWRQb3NpdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xID09PSBsdnAgJiYgbnB0VmFsdWUgPT09IGdldEJ1ZmZlclRlbXBsYXRlKCkuam9pbihcIlwiKSA/IGJ1ZmZlciA9IFtdIDogLTEgIT09IGx2cCAmJiBjbGVhck9wdGlvbmFsVGFpbChidWZmZXIpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUJ1ZmZlcihucHQsIGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgbnB0LnBsYWNlaG9sZGVyICE9PSB2YWx1ZSAmJiAobnB0LnBsYWNlaG9sZGVyID0gdmFsdWUsIFwiXCIgPT09IG5wdC5wbGFjZWhvbGRlciAmJiBucHQucmVtb3ZlQXR0cmlidXRlKFwicGxhY2Vob2xkZXJcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZGV0ZXJtaW5lTmV3Q2FyZXRQb3NpdGlvbihzZWxlY3RlZENhcmV0LCB0YWJiZWQpIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBkb1JhZGl4Rm9jdXMoY2xpY2tQb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFwiXCIgIT09IG9wdHMucmFkaXhQb2ludCAmJiAwICE9PSBvcHRzLmRpZ2l0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZwcyA9IG1hc2tzZXQudmFsaWRQb3NpdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodm9pZCAwID09PSB2cHNbY2xpY2tQb3NdIHx8IHZwc1tjbGlja1Bvc10uaW5wdXQgPT09IGdldFBsYWNlaG9sZGVyKGNsaWNrUG9zKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGlja1BvcyA8IHNlZWtOZXh0KC0xKSkgcmV0dXJuICEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYWRpeFBvcyA9ICQuaW5BcnJheShvcHRzLnJhZGl4UG9pbnQsIGdldEJ1ZmZlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLTEgIT09IHJhZGl4UG9zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHZwIGluIHZwcykgaWYgKHZwc1t2cF0gJiYgcmFkaXhQb3MgPCB2cCAmJiB2cHNbdnBdLmlucHV0ICE9PSBnZXRQbGFjZWhvbGRlcih2cCkpIHJldHVybiAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0YWJiZWQgJiYgKGlzUlRMID8gc2VsZWN0ZWRDYXJldC5lbmQgPSBzZWxlY3RlZENhcmV0LmJlZ2luIDogc2VsZWN0ZWRDYXJldC5iZWdpbiA9IHNlbGVjdGVkQ2FyZXQuZW5kKSwgXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXJldC5iZWdpbiA9PT0gc2VsZWN0ZWRDYXJldC5lbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcHRzLnBvc2l0aW9uQ2FyZXRPbkNsaWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm5vbmVcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNlbGVjdFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXJldCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbjogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IGdldEJ1ZmZlcigpLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImlnbm9yZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXJldC5lbmQgPSBzZWxlY3RlZENhcmV0LmJlZ2luID0gc2Vla05leHQoZ2V0TGFzdFZhbGlkUG9zaXRpb24oKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJyYWRpeEZvY3VzXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9SYWRpeEZvY3VzKHNlbGVjdGVkQ2FyZXQuYmVnaW4pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhZGl4UG9zID0gZ2V0QnVmZmVyKCkuam9pbihcIlwiKS5pbmRleE9mKG9wdHMucmFkaXhQb2ludCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXJldC5lbmQgPSBzZWxlY3RlZENhcmV0LmJlZ2luID0gb3B0cy5udW1lcmljSW5wdXQgPyBzZWVrTmV4dChyYWRpeFBvcykgOiByYWRpeFBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xpY2tQb3NpdGlvbiA9IHNlbGVjdGVkQ2FyZXQuYmVnaW4sIGx2Y2xpY2tQb3NpdGlvbiA9IGdldExhc3RWYWxpZFBvc2l0aW9uKGNsaWNrUG9zaXRpb24sICEwKSwgbGFzdFBvc2l0aW9uID0gc2Vla05leHQoLTEgIT09IGx2Y2xpY2tQb3NpdGlvbiB8fCBpc01hc2soMCkgPyBsdmNsaWNrUG9zaXRpb24gOiAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGlja1Bvc2l0aW9uIDwgbGFzdFBvc2l0aW9uKSBzZWxlY3RlZENhcmV0LmVuZCA9IHNlbGVjdGVkQ2FyZXQuYmVnaW4gPSBpc01hc2soY2xpY2tQb3NpdGlvbiwgITApIHx8IGlzTWFzayhjbGlja1Bvc2l0aW9uIC0gMSwgITApID8gY2xpY2tQb3NpdGlvbiA6IHNlZWtOZXh0KGNsaWNrUG9zaXRpb24pOyBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbHZwID0gbWFza3NldC52YWxpZFBvc2l0aW9uc1tsdmNsaWNrUG9zaXRpb25dLCB0dCA9IGdldFRlc3RUZW1wbGF0ZShsYXN0UG9zaXRpb24sIGx2cCA/IGx2cC5tYXRjaC5sb2NhdG9yIDogdm9pZCAwLCBsdnApLCBwbGFjZWhvbGRlciA9IGdldFBsYWNlaG9sZGVyKGxhc3RQb3NpdGlvbiwgdHQubWF0Y2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcIlwiICE9PSBwbGFjZWhvbGRlciAmJiBnZXRCdWZmZXIoKVtsYXN0UG9zaXRpb25dICE9PSBwbGFjZWhvbGRlciAmJiAhMCAhPT0gdHQubWF0Y2gub3B0aW9uYWxRdWFudGlmaWVyICYmICEwICE9PSB0dC5tYXRjaC5uZXdCbG9ja01hcmtlciB8fCAhaXNNYXNrKGxhc3RQb3NpdGlvbiwgb3B0cy5rZWVwU3RhdGljKSAmJiB0dC5tYXRjaC5kZWYgPT09IHBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdQb3MgPSBzZWVrTmV4dChsYXN0UG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3UG9zIDw9IGNsaWNrUG9zaXRpb24gfHwgY2xpY2tQb3NpdGlvbiA9PT0gbGFzdFBvc2l0aW9uKSAmJiAobGFzdFBvc2l0aW9uID0gbmV3UG9zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXJldC5lbmQgPSBzZWxlY3RlZENhcmV0LmJlZ2luID0gbGFzdFBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZENhcmV0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBFdmVudFJ1bGVyID0ge1xuICAgICAgICAgICAgICAgIG9uOiBmdW5jdGlvbiBvbihpbnB1dCwgZXZlbnROYW1lLCBldmVudEhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGV2ID0gZnVuY3Rpb24gZXYoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5vcmlnaW5hbEV2ZW50ICYmIChlID0gZS5vcmlnaW5hbEV2ZW50IHx8IGUsIGFyZ3VtZW50c1swXSA9IGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLCBhcmdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCA9PT0gdGhhdC5pbnB1dG1hc2sgJiYgXCJGT1JNXCIgIT09IHRoaXMubm9kZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1PcHRzID0gJC5kYXRhKHRoYXQsIFwiX2lucHV0bWFza19vcHRzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltT3B0cyA/IG5ldyBJbnB1dG1hc2soaW1PcHRzKS5tYXNrKHRoYXQpIDogRXZlbnRSdWxlci5vZmYodGhhdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcInNldHZhbHVlXCIgPT09IGUudHlwZSB8fCBcIkZPUk1cIiA9PT0gdGhpcy5ub2RlTmFtZSB8fCAhKHRoYXQuZGlzYWJsZWQgfHwgdGhhdC5yZWFkT25seSAmJiAhKFwia2V5ZG93blwiID09PSBlLnR5cGUgJiYgZS5jdHJsS2V5ICYmIDY3ID09PSBlLmtleUNvZGUgfHwgITEgPT09IG9wdHMudGFiVGhyb3VnaCAmJiBlLmtleUNvZGUgPT09IGtleUNvZGUuVEFCKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaW5wdXRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghMCA9PT0gc2tpcElucHV0RXZlbnQgfHwgZS5pbnB1dFR5cGUgJiYgXCJpbnNlcnRDb21wb3NpdGlvblRleHRcIiA9PT0gZS5pbnB1dFR5cGUpIHJldHVybiBza2lwSW5wdXRFdmVudCA9ICExLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImtleWRvd25cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBLZXlQcmVzc0V2ZW50ID0gITEsIHNraXBJbnB1dEV2ZW50ID0gITE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJrZXlwcmVzc1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEwID09PSBza2lwS2V5UHJlc3NFdmVudCkgcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBLZXlQcmVzc0V2ZW50ID0gITA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJjbGlja1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJmb2N1c1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25FdmVudCA/ICh2YWxpZGF0aW9uRXZlbnQgPSAhMSwgaW5wdXQuYmx1cigpLCBIYW5kbGVOYXRpdmVQbGFjZWhvbGRlcihpbnB1dCwgKGlzUlRMID8gZ2V0QnVmZmVyVGVtcGxhdGUoKS5zbGljZSgpLnJldmVyc2UoKSA6IGdldEJ1ZmZlclRlbXBsYXRlKCkpLmpvaW4oXCJcIikpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDNlMykpIDogKGFyZ3MgPSBhcmd1bWVudHMsIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQuaW5wdXRtYXNrICYmIGV2ZW50SGFuZGxlci5hcHBseSh0aGF0LCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDApKSwgITE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldHVyblZhbCA9IGV2ZW50SGFuZGxlci5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gITEgPT09IHJldHVyblZhbCAmJiAoZS5wcmV2ZW50RGVmYXVsdCgpLCBlLnN0b3BQcm9wYWdhdGlvbigpKSwgcmV0dXJuVmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGlucHV0LmlucHV0bWFzay5ldmVudHNbZXZlbnROYW1lXSA9IGlucHV0LmlucHV0bWFzay5ldmVudHNbZXZlbnROYW1lXSB8fCBbXSwgaW5wdXQuaW5wdXRtYXNrLmV2ZW50c1tldmVudE5hbWVdLnB1c2goZXYpLCBcbiAgICAgICAgICAgICAgICAgICAgLTEgIT09ICQuaW5BcnJheShldmVudE5hbWUsIFsgXCJzdWJtaXRcIiwgXCJyZXNldFwiIF0pID8gbnVsbCAhPT0gaW5wdXQuZm9ybSAmJiAkKGlucHV0LmZvcm0pLm9uKGV2ZW50TmFtZSwgZXYpIDogJChpbnB1dCkub24oZXZlbnROYW1lLCBldik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvZmY6IGZ1bmN0aW9uIG9mZihpbnB1dCwgZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGV2ZW50cztcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQuaW5wdXRtYXNrICYmIGlucHV0LmlucHV0bWFzay5ldmVudHMgJiYgKGV2ZW50ID8gKGV2ZW50cyA9IFtdLCBldmVudHNbZXZlbnRdID0gaW5wdXQuaW5wdXRtYXNrLmV2ZW50c1tldmVudF0pIDogZXZlbnRzID0gaW5wdXQuaW5wdXRtYXNrLmV2ZW50cywgXG4gICAgICAgICAgICAgICAgICAgICQuZWFjaChldmVudHMsIGZ1bmN0aW9uKGV2ZW50TmFtZSwgZXZBcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzAgPCBldkFyci5sZW5ndGg7ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBldiA9IGV2QXJyLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICE9PSAkLmluQXJyYXkoZXZlbnROYW1lLCBbIFwic3VibWl0XCIsIFwicmVzZXRcIiBdKSA/IG51bGwgIT09IGlucHV0LmZvcm0gJiYgJChpbnB1dC5mb3JtKS5vZmYoZXZlbnROYW1lLCBldikgOiAkKGlucHV0KS5vZmYoZXZlbnROYW1lLCBldik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgaW5wdXQuaW5wdXRtYXNrLmV2ZW50c1tldmVudE5hbWVdO1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgRXZlbnRIYW5kbGVycyA9IHtcbiAgICAgICAgICAgICAgICBrZXlkb3duRXZlbnQ6IGZ1bmN0aW9uIGtleWRvd25FdmVudChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMsICRpbnB1dCA9ICQoaW5wdXQpLCBrID0gZS5rZXlDb2RlLCBwb3MgPSBjYXJldChpbnB1dCksIGtkUmVzdWx0ID0gb3B0cy5vbktleURvd24uY2FsbCh0aGlzLCBlLCBnZXRCdWZmZXIoKSwgcG9zLCBvcHRzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0ga2RSZXN1bHQpIHJldHVybiBrZFJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGsgPT09IGtleUNvZGUuQkFDS1NQQUNFIHx8IGsgPT09IGtleUNvZGUuREVMRVRFIHx8IGlwaG9uZSAmJiBrID09PSBrZXlDb2RlLkJBQ0tTUEFDRV9TQUZBUkkgfHwgZS5jdHJsS2V5ICYmIGsgPT09IGtleUNvZGUuWCAmJiAhKFwib25jdXRcIiBpbiBpbnB1dCkpIGUucHJldmVudERlZmF1bHQoKSwgXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVJlbW92ZShpbnB1dCwgaywgcG9zKSwgd3JpdGVCdWZmZXIoaW5wdXQsIGdldEJ1ZmZlcighMCksIG1hc2tzZXQucCwgZSwgaW5wdXQuaW5wdXRtYXNrLl92YWx1ZUdldCgpICE9PSBnZXRCdWZmZXIoKS5qb2luKFwiXCIpKTsgZWxzZSBpZiAoayA9PT0ga2V5Q29kZS5FTkQgfHwgayA9PT0ga2V5Q29kZS5QQUdFX0RPV04pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXJldFBvcyA9IHNlZWtOZXh0KGdldExhc3RWYWxpZFBvc2l0aW9uKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZXQoaW5wdXQsIGUuc2hpZnRLZXkgPyBwb3MuYmVnaW4gOiBjYXJldFBvcywgY2FyZXRQb3MsICEwKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGsgPT09IGtleUNvZGUuSE9NRSAmJiAhZS5zaGlmdEtleSB8fCBrID09PSBrZXlDb2RlLlBBR0VfVVAgPyAoZS5wcmV2ZW50RGVmYXVsdCgpLCBcbiAgICAgICAgICAgICAgICAgICAgY2FyZXQoaW5wdXQsIDAsIGUuc2hpZnRLZXkgPyBwb3MuYmVnaW4gOiAwLCAhMCkpIDogKG9wdHMudW5kb09uRXNjYXBlICYmIGsgPT09IGtleUNvZGUuRVNDQVBFIHx8IDkwID09PSBrICYmIGUuY3RybEtleSkgJiYgITAgIT09IGUuYWx0S2V5ID8gKGNoZWNrVmFsKGlucHV0LCAhMCwgITEsIHVuZG9WYWx1ZS5zcGxpdChcIlwiKSksIFxuICAgICAgICAgICAgICAgICAgICAkaW5wdXQudHJpZ2dlcihcImNsaWNrXCIpKSA6ICEwID09PSBvcHRzLnRhYlRocm91Z2ggJiYgayA9PT0ga2V5Q29kZS5UQUIgPyAoITAgPT09IGUuc2hpZnRLZXkgPyAoITAgPT09IGdldFRlc3QocG9zLmJlZ2luKS5tYXRjaC5zdGF0aWMgJiYgKHBvcy5iZWdpbiA9IHNlZWtOZXh0KHBvcy5iZWdpbikpLCBcbiAgICAgICAgICAgICAgICAgICAgcG9zLmVuZCA9IHNlZWtQcmV2aW91cyhwb3MuYmVnaW4sICEwKSwgcG9zLmJlZ2luID0gc2Vla1ByZXZpb3VzKHBvcy5lbmQsICEwKSkgOiAocG9zLmJlZ2luID0gc2Vla05leHQocG9zLmJlZ2luLCAhMCksIFxuICAgICAgICAgICAgICAgICAgICBwb3MuZW5kID0gc2Vla05leHQocG9zLmJlZ2luLCAhMCksIHBvcy5lbmQgPCBtYXNrc2V0Lm1hc2tMZW5ndGggJiYgcG9zLmVuZC0tKSwgcG9zLmJlZ2luIDwgbWFza3NldC5tYXNrTGVuZ3RoICYmIChlLnByZXZlbnREZWZhdWx0KCksIFxuICAgICAgICAgICAgICAgICAgICBjYXJldChpbnB1dCwgcG9zLmJlZ2luLCBwb3MuZW5kKSkpIDogZS5zaGlmdEtleSB8fCBvcHRzLmluc2VydE1vZGVWaXN1YWwgJiYgITEgPT09IG9wdHMuaW5zZXJ0TW9kZSAmJiAoayA9PT0ga2V5Q29kZS5SSUdIVCA/IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FyZXRQb3MgPSBjYXJldChpbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJldChpbnB1dCwgY2FyZXRQb3MuYmVnaW4pO1xuICAgICAgICAgICAgICAgICAgICB9LCAwKSA6IGsgPT09IGtleUNvZGUuTEVGVCAmJiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhcmV0UG9zX2JlZ2luID0gdHJhbnNsYXRlUG9zaXRpb24oaW5wdXQuaW5wdXRtYXNrLmNhcmV0UG9zLmJlZ2luKSwgY2FyZXRQb3NfZW5kID0gdHJhbnNsYXRlUG9zaXRpb24oaW5wdXQuaW5wdXRtYXNrLmNhcmV0UG9zLmVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJldChpbnB1dCwgaXNSVEwgPyBjYXJldFBvc19iZWdpbiArIChjYXJldFBvc19iZWdpbiA9PT0gbWFza3NldC5tYXNrTGVuZ3RoID8gMCA6IDEpIDogY2FyZXRQb3NfYmVnaW4gLSAoMCA9PT0gY2FyZXRQb3NfYmVnaW4gPyAwIDogMSkpO1xuICAgICAgICAgICAgICAgICAgICB9LCAwKSk7XG4gICAgICAgICAgICAgICAgICAgIGlnbm9yYWJsZSA9IC0xICE9PSAkLmluQXJyYXkoaywgb3B0cy5pZ25vcmFibGVzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGtleXByZXNzRXZlbnQ6IGZ1bmN0aW9uIGtleXByZXNzRXZlbnQoZSwgY2hlY2t2YWwsIHdyaXRlT3V0LCBzdHJpY3QsIG5keCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLCAkaW5wdXQgPSAkKGlucHV0KSwgayA9IGUud2hpY2ggfHwgZS5jaGFyQ29kZSB8fCBlLmtleUNvZGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKCEwID09PSBjaGVja3ZhbCB8fCBlLmN0cmxLZXkgJiYgZS5hbHRLZXkpICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5IHx8IGlnbm9yYWJsZSkpIHJldHVybiBrID09PSBrZXlDb2RlLkVOVEVSICYmIHVuZG9WYWx1ZSAhPT0gZ2V0QnVmZmVyKCkuam9pbihcIlwiKSAmJiAodW5kb1ZhbHVlID0gZ2V0QnVmZmVyKCkuam9pbihcIlwiKSwgXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQudHJpZ2dlcihcImNoYW5nZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMCkpLCBza2lwSW5wdXRFdmVudCA9ICEwLCAhMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDQ0ICE9PSBrICYmIDQ2ICE9PSBrIHx8IDMgIT09IGUubG9jYXRpb24gfHwgXCJcIiA9PT0gb3B0cy5yYWRpeFBvaW50IHx8IChrID0gb3B0cy5yYWRpeFBvaW50LmNoYXJDb2RlQXQoMCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IGNoZWNrdmFsID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiBuZHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBuZHhcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gOiBjYXJldChpbnB1dCksIGZvcndhcmRQb3NpdGlvbiwgYyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoayk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrc2V0LndyaXRlT3V0QnVmZmVyID0gITA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsUmVzdWx0ID0gaXNWYWxpZChwb3MsIGMsIHN0cmljdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoITEgIT09IHZhbFJlc3VsdCAmJiAocmVzZXRNYXNrU2V0KCEwKSwgZm9yd2FyZFBvc2l0aW9uID0gdm9pZCAwICE9PSB2YWxSZXN1bHQuY2FyZXQgPyB2YWxSZXN1bHQuY2FyZXQgOiBzZWVrTmV4dCh2YWxSZXN1bHQucG9zLmJlZ2luID8gdmFsUmVzdWx0LnBvcy5iZWdpbiA6IHZhbFJlc3VsdC5wb3MpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tzZXQucCA9IGZvcndhcmRQb3NpdGlvbiksIGZvcndhcmRQb3NpdGlvbiA9IG9wdHMubnVtZXJpY0lucHV0ICYmIHZvaWQgMCA9PT0gdmFsUmVzdWx0LmNhcmV0ID8gc2Vla1ByZXZpb3VzKGZvcndhcmRQb3NpdGlvbikgOiBmb3J3YXJkUG9zaXRpb24sIFxuICAgICAgICAgICAgICAgICAgICAgICAgITEgIT09IHdyaXRlT3V0ICYmIChzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMub25LZXlWYWxpZGF0aW9uLmNhbGwoaW5wdXQsIGssIHZhbFJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAwKSwgbWFza3NldC53cml0ZU91dEJ1ZmZlciAmJiAhMSAhPT0gdmFsUmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBnZXRCdWZmZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUJ1ZmZlcihpbnB1dCwgYnVmZmVyLCBmb3J3YXJkUG9zaXRpb24sIGUsICEwICE9PSBjaGVja3ZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCgpLCBjaGVja3ZhbCkgcmV0dXJuICExICE9PSB2YWxSZXN1bHQgJiYgKHZhbFJlc3VsdC5mb3J3YXJkUG9zaXRpb24gPSBmb3J3YXJkUG9zaXRpb24pLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbFJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcGFzdGVFdmVudDogZnVuY3Rpb24gcGFzdGVFdmVudChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMsIGlucHV0VmFsdWUgPSB0aGlzLmlucHV0bWFzay5fdmFsdWVHZXQoITApLCBjYXJldFBvcyA9IGNhcmV0KHRoaXMpLCB0ZW1wVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGlzUlRMICYmICh0ZW1wVmFsdWUgPSBjYXJldFBvcy5lbmQsIGNhcmV0UG9zLmVuZCA9IGNhcmV0UG9zLmJlZ2luLCBjYXJldFBvcy5iZWdpbiA9IHRlbXBWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZUJlZm9yZUNhcmV0ID0gaW5wdXRWYWx1ZS5zdWJzdHIoMCwgY2FyZXRQb3MuYmVnaW4pLCB2YWx1ZUFmdGVyQ2FyZXQgPSBpbnB1dFZhbHVlLnN1YnN0cihjYXJldFBvcy5lbmQsIGlucHV0VmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlQmVmb3JlQ2FyZXQgPT0gKGlzUlRMID8gZ2V0QnVmZmVyVGVtcGxhdGUoKS5zbGljZSgpLnJldmVyc2UoKSA6IGdldEJ1ZmZlclRlbXBsYXRlKCkpLnNsaWNlKDAsIGNhcmV0UG9zLmJlZ2luKS5qb2luKFwiXCIpICYmICh2YWx1ZUJlZm9yZUNhcmV0ID0gXCJcIiksIFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUFmdGVyQ2FyZXQgPT0gKGlzUlRMID8gZ2V0QnVmZmVyVGVtcGxhdGUoKS5zbGljZSgpLnJldmVyc2UoKSA6IGdldEJ1ZmZlclRlbXBsYXRlKCkpLnNsaWNlKGNhcmV0UG9zLmVuZCkuam9pbihcIlwiKSAmJiAodmFsdWVBZnRlckNhcmV0ID0gXCJcIiksIFxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY2xpcGJvYXJkRGF0YSAmJiB3aW5kb3cuY2xpcGJvYXJkRGF0YS5nZXREYXRhKSBpbnB1dFZhbHVlID0gdmFsdWVCZWZvcmVDYXJldCArIHdpbmRvdy5jbGlwYm9hcmREYXRhLmdldERhdGEoXCJUZXh0XCIpICsgdmFsdWVBZnRlckNhcmV0OyBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5jbGlwYm9hcmREYXRhIHx8ICFlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSkgcmV0dXJuICEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IHZhbHVlQmVmb3JlQ2FyZXQgKyBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YShcInRleHQvcGxhaW5cIikgKyB2YWx1ZUFmdGVyQ2FyZXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhc3RlVmFsdWUgPSBpbnB1dFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKG9wdHMub25CZWZvcmVQYXN0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZVZhbHVlID0gb3B0cy5vbkJlZm9yZVBhc3RlLmNhbGwoaW5wdXRtYXNrLCBpbnB1dFZhbHVlLCBvcHRzKSwgITEgPT09IHBhc3RlVmFsdWUpIHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZVZhbHVlID0gcGFzdGVWYWx1ZSB8fCBpbnB1dFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGVja1ZhbCh0aGlzLCAhMSwgITEsIHBhc3RlVmFsdWUudG9TdHJpbmcoKS5zcGxpdChcIlwiKSksIHdyaXRlQnVmZmVyKHRoaXMsIGdldEJ1ZmZlcigpLCBzZWVrTmV4dChnZXRMYXN0VmFsaWRQb3NpdGlvbigpKSwgZSwgdW5kb1ZhbHVlICE9PSBnZXRCdWZmZXIoKS5qb2luKFwiXCIpKSwgXG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGlucHV0RmFsbEJhY2tFdmVudDogZnVuY3Rpb24gaW5wdXRGYWxsQmFja0V2ZW50KGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaWVNb2JpbGVIYW5kbGVyKGlucHV0LCBpbnB1dFZhbHVlLCBjYXJldFBvcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGllbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0Q2hhciA9IGlucHV0VmFsdWUucmVwbGFjZShnZXRCdWZmZXIoKS5qb2luKFwiXCIpLCBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMSA9PT0gaW5wdXRDaGFyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXYgPSBpbnB1dFZhbHVlLnNwbGl0KFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdi5zcGxpY2UoY2FyZXRQb3MuYmVnaW4sIDAsIGlucHV0Q2hhciksIGlucHV0VmFsdWUgPSBpdi5qb2luKFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFuYWx5c2VDaGFuZ2VzKGlucHV0VmFsdWUsIGJ1ZmZlciwgY2FyZXRQb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGZyb250UGFydCA9IGlucHV0VmFsdWUuc3Vic3RyKDAsIGNhcmV0UG9zLmJlZ2luKS5zcGxpdChcIlwiKSwgYmFja1BhcnQgPSBpbnB1dFZhbHVlLnN1YnN0cihjYXJldFBvcy5iZWdpbikuc3BsaXQoXCJcIiksIGZyb250QnVmZmVyUGFydCA9IGJ1ZmZlci5zdWJzdHIoMCwgY2FyZXRQb3MuYmVnaW4pLnNwbGl0KFwiXCIpLCBiYWNrQnVmZmVyUGFydCA9IGJ1ZmZlci5zdWJzdHIoY2FyZXRQb3MuYmVnaW4pLnNwbGl0KFwiXCIpLCBmcGwgPSBmcm9udFBhcnQubGVuZ3RoID49IGZyb250QnVmZmVyUGFydC5sZW5ndGggPyBmcm9udFBhcnQubGVuZ3RoIDogZnJvbnRCdWZmZXJQYXJ0Lmxlbmd0aCwgYnBsID0gYmFja1BhcnQubGVuZ3RoID49IGJhY2tCdWZmZXJQYXJ0Lmxlbmd0aCA/IGJhY2tQYXJ0Lmxlbmd0aCA6IGJhY2tCdWZmZXJQYXJ0Lmxlbmd0aCwgYmwsIGksIGFjdGlvbiA9IFwiXCIsIGRhdGEgPSBbXSwgbWFya2VyID0gXCJ+XCIsIHBsYWNlaG9sZGVyOyBmcm9udFBhcnQubGVuZ3RoIDwgZnBsOyApIGZyb250UGFydC5wdXNoKFwiflwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoO2Zyb250QnVmZmVyUGFydC5sZW5ndGggPCBmcGw7ICkgZnJvbnRCdWZmZXJQYXJ0LnB1c2goXCJ+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7YmFja1BhcnQubGVuZ3RoIDwgYnBsOyApIGJhY2tQYXJ0LnVuc2hpZnQoXCJ+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7YmFja0J1ZmZlclBhcnQubGVuZ3RoIDwgYnBsOyApIGJhY2tCdWZmZXJQYXJ0LnVuc2hpZnQoXCJ+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0J1ZmZlciA9IGZyb250UGFydC5jb25jYXQoYmFja1BhcnQpLCBvbGRCdWZmZXIgPSBmcm9udEJ1ZmZlclBhcnQuY29uY2F0KGJhY2tCdWZmZXJQYXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGJsID0gbmV3QnVmZmVyLmxlbmd0aDsgaSA8IGJsOyBpKyspIHN3aXRjaCAocGxhY2Vob2xkZXIgPSBnZXRQbGFjZWhvbGRlcih0cmFuc2xhdGVQb3NpdGlvbihpKSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJpbnNlcnRUZXh0XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkQnVmZmVyW2kgLSAxXSA9PT0gbmV3QnVmZmVyW2ldICYmIGNhcmV0UG9zLmJlZ2luID09IG5ld0J1ZmZlci5sZW5ndGggLSAxICYmIGRhdGEucHVzaChuZXdCdWZmZXJbaV0pLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gYmw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImluc2VydFJlcGxhY2VtZW50VGV4dFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiflwiID09PSBuZXdCdWZmZXJbaV0gPyBjYXJldFBvcy5lbmQrKyA6IGkgPSBibDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZGVsZXRlQ29udGVudEJhY2t3YXJkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ+XCIgPT09IG5ld0J1ZmZlcltpXSA/IGNhcmV0UG9zLmVuZCsrIDogaSA9IGJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QnVmZmVyW2ldICE9PSBvbGRCdWZmZXJbaV0gJiYgKFwiflwiICE9PSBuZXdCdWZmZXJbaSArIDFdICYmIG5ld0J1ZmZlcltpICsgMV0gIT09IHBsYWNlaG9sZGVyICYmIHZvaWQgMCAhPT0gbmV3QnVmZmVyW2kgKyAxXSB8fCAob2xkQnVmZmVyW2ldICE9PSBwbGFjZWhvbGRlciB8fCBcIn5cIiAhPT0gb2xkQnVmZmVyW2kgKyAxXSkgJiYgXCJ+XCIgIT09IG9sZEJ1ZmZlcltpXSA/IFwiflwiID09PSBvbGRCdWZmZXJbaSArIDFdICYmIG9sZEJ1ZmZlcltpXSA9PT0gbmV3QnVmZmVyW2kgKyAxXSA/IChhY3Rpb24gPSBcImluc2VydFRleHRcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wdXNoKG5ld0J1ZmZlcltpXSksIGNhcmV0UG9zLmJlZ2luLS0sIGNhcmV0UG9zLmVuZC0tKSA6IG5ld0J1ZmZlcltpXSAhPT0gcGxhY2Vob2xkZXIgJiYgXCJ+XCIgIT09IG5ld0J1ZmZlcltpXSAmJiAoXCJ+XCIgPT09IG5ld0J1ZmZlcltpICsgMV0gfHwgb2xkQnVmZmVyW2ldICE9PSBuZXdCdWZmZXJbaV0gJiYgb2xkQnVmZmVyW2kgKyAxXSA9PT0gbmV3QnVmZmVyW2kgKyAxXSkgPyAoYWN0aW9uID0gXCJpbnNlcnRSZXBsYWNlbWVudFRleHRcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wdXNoKG5ld0J1ZmZlcltpXSksIGNhcmV0UG9zLmJlZ2luLS0pIDogXCJ+XCIgPT09IG5ld0J1ZmZlcltpXSA/IChhY3Rpb24gPSBcImRlbGV0ZUNvbnRlbnRCYWNrd2FyZFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaXNNYXNrKHRyYW5zbGF0ZVBvc2l0aW9uKGkpLCAhMCkgJiYgb2xkQnVmZmVyW2ldICE9PSBvcHRzLnJhZGl4UG9pbnQgfHwgY2FyZXRQb3MuZW5kKyspIDogaSA9IGJsIDogKGFjdGlvbiA9IFwiaW5zZXJ0VGV4dFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnB1c2gobmV3QnVmZmVyW2ldKSwgY2FyZXRQb3MuYmVnaW4tLSwgY2FyZXRQb3MuZW5kLS0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJldDogY2FyZXRQb3NcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcywgaW5wdXRWYWx1ZSA9IGlucHV0LmlucHV0bWFzay5fdmFsdWVHZXQoITApLCBidWZmZXIgPSAoaXNSVEwgPyBnZXRCdWZmZXIoKS5zbGljZSgpLnJldmVyc2UoKSA6IGdldEJ1ZmZlcigpKS5qb2luKFwiXCIpLCBjYXJldFBvcyA9IGNhcmV0KGlucHV0LCB2b2lkIDAsIHZvaWQgMCwgITApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyICE9PSBpbnB1dFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlID0gaWVNb2JpbGVIYW5kbGVyKGlucHV0LCBpbnB1dFZhbHVlLCBjYXJldFBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhbmdlcyA9IGFuYWx5c2VDaGFuZ2VzKGlucHV0VmFsdWUsIGJ1ZmZlciwgY2FyZXRQb3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICgoaW5wdXQuaW5wdXRtYXNrLnNoYWRvd1Jvb3QgfHwgZG9jdW1lbnQpLmFjdGl2ZUVsZW1lbnQgIT09IGlucHV0ICYmIGlucHV0LmZvY3VzKCksIFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVCdWZmZXIoaW5wdXQsIGdldEJ1ZmZlcigpKSwgY2FyZXQoaW5wdXQsIGNhcmV0UG9zLmJlZ2luLCBjYXJldFBvcy5lbmQsICEwKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLmFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaW5zZXJ0VGV4dFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5lYWNoKGNoYW5nZXMuZGF0YSwgZnVuY3Rpb24obmR4LCBlbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5cHJlc3MgPSBuZXcgJC5FdmVudChcImtleXByZXNzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlwcmVzcy53aGljaCA9IGVudHJ5LmNoYXJDb2RlQXQoMCksIGlnbm9yYWJsZSA9ICExLCBFdmVudEhhbmRsZXJzLmtleXByZXNzRXZlbnQuY2FsbChpbnB1dCwga2V5cHJlc3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZWwudHJpZ2dlcihcImtleXVwXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJkZWxldGVDb250ZW50QmFja3dhcmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ZG93biA9IG5ldyAkLkV2ZW50KFwia2V5ZG93blwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlkb3duLmtleUNvZGUgPSBrZXlDb2RlLkJBQ0tTUEFDRSwgRXZlbnRIYW5kbGVycy5rZXlkb3duRXZlbnQuY2FsbChpbnB1dCwga2V5ZG93bik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBseUlucHV0VmFsdWUoaW5wdXQsIGlucHV0VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjb21wb3NpdGlvbmVuZEV2ZW50OiBmdW5jdGlvbiBjb21wb3NpdGlvbmVuZEV2ZW50KGUpIHtcbiAgICAgICAgICAgICAgICAgICAgJGVsLnRyaWdnZXIoXCJpbnB1dFwiKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldFZhbHVlRXZlbnQ6IGZ1bmN0aW9uIHNldFZhbHVlRXZlbnQoZSwgYXJndW1lbnRfMSwgYXJndW1lbnRfMikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLCB2YWx1ZSA9IGUgJiYgZS5kZXRhaWwgPyBlLmRldGFpbFswXSA6IGFyZ3VtZW50XzE7XG4gICAgICAgICAgICAgICAgICAgIHZvaWQgMCA9PT0gdmFsdWUgJiYgKHZhbHVlID0gdGhpcy5pbnB1dG1hc2suX3ZhbHVlR2V0KCEwKSksIGFwcGx5SW5wdXRWYWx1ZSh0aGlzLCB2YWx1ZSksIFxuICAgICAgICAgICAgICAgICAgICAoZS5kZXRhaWwgJiYgdm9pZCAwICE9PSBlLmRldGFpbFsxXSB8fCB2b2lkIDAgIT09IGFyZ3VtZW50XzIpICYmIGNhcmV0KHRoaXMsIGUuZGV0YWlsID8gZS5kZXRhaWxbMV0gOiBhcmd1bWVudF8yKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZvY3VzRXZlbnQ6IGZ1bmN0aW9uIGZvY3VzRXZlbnQoZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLCBucHRWYWx1ZSA9IHRoaXMuaW5wdXRtYXNrLl92YWx1ZUdldCgpO1xuICAgICAgICAgICAgICAgICAgICBvcHRzLnNob3dNYXNrT25Gb2N1cyAmJiBucHRWYWx1ZSAhPT0gZ2V0QnVmZmVyKCkuam9pbihcIlwiKSAmJiB3cml0ZUJ1ZmZlcih0aGlzLCBnZXRCdWZmZXIoKSwgc2Vla05leHQoZ2V0TGFzdFZhbGlkUG9zaXRpb24oKSkpLCBcbiAgICAgICAgICAgICAgICAgICAgITAgIT09IG9wdHMucG9zaXRpb25DYXJldE9uVGFiIHx8ICExICE9PSBtb3VzZUVudGVyIHx8IGlzQ29tcGxldGUoZ2V0QnVmZmVyKCkpICYmIC0xICE9PSBnZXRMYXN0VmFsaWRQb3NpdGlvbigpIHx8IEV2ZW50SGFuZGxlcnMuY2xpY2tFdmVudC5hcHBseSh0aGlzLCBbIGUsICEwIF0pLCBcbiAgICAgICAgICAgICAgICAgICAgdW5kb1ZhbHVlID0gZ2V0QnVmZmVyKCkuam9pbihcIlwiKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGludmFsaWRFdmVudDogZnVuY3Rpb24gaW52YWxpZEV2ZW50KGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbkV2ZW50ID0gITA7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtb3VzZWxlYXZlRXZlbnQ6IGZ1bmN0aW9uIG1vdXNlbGVhdmVFdmVudCgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgbW91c2VFbnRlciA9ICExLCBvcHRzLmNsZWFyTWFza09uTG9zdEZvY3VzICYmICh0aGlzLmlucHV0bWFzay5zaGFkb3dSb290IHx8IGRvY3VtZW50KS5hY3RpdmVFbGVtZW50ICE9PSB0aGlzICYmIEhhbmRsZU5hdGl2ZVBsYWNlaG9sZGVyKHRoaXMsIG9yaWdpbmFsUGxhY2Vob2xkZXIpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2xpY2tFdmVudDogZnVuY3Rpb24gY2xpY2tFdmVudChlLCB0YWJiZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLmlucHV0bWFzay5zaGFkb3dSb290IHx8IGRvY3VtZW50KS5hY3RpdmVFbGVtZW50ID09PSB0aGlzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3Q2FyZXRQb3NpdGlvbiA9IGRldGVybWluZU5ld0NhcmV0UG9zaXRpb24oY2FyZXQodGhpcyksIHRhYmJlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2b2lkIDAgIT09IG5ld0NhcmV0UG9zaXRpb24gJiYgY2FyZXQodGhpcywgbmV3Q2FyZXRQb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGN1dEV2ZW50OiBmdW5jdGlvbiBjdXRFdmVudChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMsIHBvcyA9IGNhcmV0KHRoaXMpLCBjbGlwYm9hcmREYXRhID0gd2luZG93LmNsaXBib2FyZERhdGEgfHwgZS5jbGlwYm9hcmREYXRhLCBjbGlwRGF0YSA9IGlzUlRMID8gZ2V0QnVmZmVyKCkuc2xpY2UocG9zLmVuZCwgcG9zLmJlZ2luKSA6IGdldEJ1ZmZlcigpLnNsaWNlKHBvcy5iZWdpbiwgcG9zLmVuZCk7XG4gICAgICAgICAgICAgICAgICAgIGNsaXBib2FyZERhdGEuc2V0RGF0YShcInRleHRcIiwgaXNSVEwgPyBjbGlwRGF0YS5yZXZlcnNlKCkuam9pbihcIlwiKSA6IGNsaXBEYXRhLmpvaW4oXCJcIikpLCBcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQgJiYgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjb3B5XCIpLCBoYW5kbGVSZW1vdmUodGhpcywga2V5Q29kZS5ERUxFVEUsIHBvcyksIFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUJ1ZmZlcih0aGlzLCBnZXRCdWZmZXIoKSwgbWFza3NldC5wLCBlLCB1bmRvVmFsdWUgIT09IGdldEJ1ZmZlcigpLmpvaW4oXCJcIikpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmx1ckV2ZW50OiBmdW5jdGlvbiBibHVyRXZlbnQoZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJGlucHV0ID0gJCh0aGlzKSwgaW5wdXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dG1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZU5hdGl2ZVBsYWNlaG9sZGVyKHRoaXMsIG9yaWdpbmFsUGxhY2Vob2xkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5wdFZhbHVlID0gdGhpcy5pbnB1dG1hc2suX3ZhbHVlR2V0KCksIGJ1ZmZlciA9IGdldEJ1ZmZlcigpLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlwiICE9PSBucHRWYWx1ZSAmJiAob3B0cy5jbGVhck1hc2tPbkxvc3RGb2N1cyAmJiAoLTEgPT09IGdldExhc3RWYWxpZFBvc2l0aW9uKCkgJiYgbnB0VmFsdWUgPT09IGdldEJ1ZmZlclRlbXBsYXRlKCkuam9pbihcIlwiKSA/IGJ1ZmZlciA9IFtdIDogY2xlYXJPcHRpb25hbFRhaWwoYnVmZmVyKSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgITEgPT09IGlzQ29tcGxldGUoYnVmZmVyKSAmJiAoc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQudHJpZ2dlcihcImluY29tcGxldGVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAwKSwgb3B0cy5jbGVhckluY29tcGxldGUgJiYgKHJlc2V0TWFza1NldCgpLCBidWZmZXIgPSBvcHRzLmNsZWFyTWFza09uTG9zdEZvY3VzID8gW10gOiBnZXRCdWZmZXJUZW1wbGF0ZSgpLnNsaWNlKCkpKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUJ1ZmZlcih0aGlzLCBidWZmZXIsIHZvaWQgMCwgZSkpLCB1bmRvVmFsdWUgIT09IGdldEJ1ZmZlcigpLmpvaW4oXCJcIikgJiYgKHVuZG9WYWx1ZSA9IGdldEJ1ZmZlcigpLmpvaW4oXCJcIiksIFxuICAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0LnRyaWdnZXIoXCJjaGFuZ2VcIikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtb3VzZWVudGVyRXZlbnQ6IGZ1bmN0aW9uIG1vdXNlZW50ZXJFdmVudCgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgbW91c2VFbnRlciA9ICEwLCAodGhpcy5pbnB1dG1hc2suc2hhZG93Um9vdCB8fCBkb2N1bWVudCkuYWN0aXZlRWxlbWVudCAhPT0gdGhpcyAmJiAobnVsbCA9PSBvcmlnaW5hbFBsYWNlaG9sZGVyICYmIHRoaXMucGxhY2Vob2xkZXIgIT09IG9yaWdpbmFsUGxhY2Vob2xkZXIgJiYgKG9yaWdpbmFsUGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyKSwgXG4gICAgICAgICAgICAgICAgICAgIG9wdHMuc2hvd01hc2tPbkhvdmVyICYmIEhhbmRsZU5hdGl2ZVBsYWNlaG9sZGVyKHRoaXMsIChpc1JUTCA/IGdldEJ1ZmZlclRlbXBsYXRlKCkuc2xpY2UoKS5yZXZlcnNlKCkgOiBnZXRCdWZmZXJUZW1wbGF0ZSgpKS5qb2luKFwiXCIpKSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzdWJtaXRFdmVudDogZnVuY3Rpb24gc3VibWl0RXZlbnQoKSB7XG4gICAgICAgICAgICAgICAgICAgIHVuZG9WYWx1ZSAhPT0gZ2V0QnVmZmVyKCkuam9pbihcIlwiKSAmJiAkZWwudHJpZ2dlcihcImNoYW5nZVwiKSwgb3B0cy5jbGVhck1hc2tPbkxvc3RGb2N1cyAmJiAtMSA9PT0gZ2V0TGFzdFZhbGlkUG9zaXRpb24oKSAmJiBlbC5pbnB1dG1hc2suX3ZhbHVlR2V0ICYmIGVsLmlucHV0bWFzay5fdmFsdWVHZXQoKSA9PT0gZ2V0QnVmZmVyVGVtcGxhdGUoKS5qb2luKFwiXCIpICYmIGVsLmlucHV0bWFzay5fdmFsdWVTZXQoXCJcIiksIFxuICAgICAgICAgICAgICAgICAgICBvcHRzLmNsZWFySW5jb21wbGV0ZSAmJiAhMSA9PT0gaXNDb21wbGV0ZShnZXRCdWZmZXIoKSkgJiYgZWwuaW5wdXRtYXNrLl92YWx1ZVNldChcIlwiKSwgXG4gICAgICAgICAgICAgICAgICAgIG9wdHMucmVtb3ZlTWFza09uU3VibWl0ICYmIChlbC5pbnB1dG1hc2suX3ZhbHVlU2V0KGVsLmlucHV0bWFzay51bm1hc2tlZHZhbHVlKCksICEwKSwgXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUJ1ZmZlcihlbCwgZ2V0QnVmZmVyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9LCAwKSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZXNldEV2ZW50OiBmdW5jdGlvbiByZXNldEV2ZW50KCkge1xuICAgICAgICAgICAgICAgICAgICBlbC5pbnB1dG1hc2sucmVmcmVzaFZhbHVlID0gITAsIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBseUlucHV0VmFsdWUoZWwsIGVsLmlucHV0bWFzay5fdmFsdWVHZXQoITApKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdmFsdWVCdWZmZXI7XG4gICAgICAgICAgICBmdW5jdGlvbiBjaGVja1ZhbChpbnB1dCwgd3JpdGVPdXQsIHN0cmljdCwgbnB0dmwsIGluaXRpYXRpbmdFdmVudCkge1xuICAgICAgICAgICAgICAgIHZhciBpbnB1dG1hc2sgPSB0aGlzIHx8IGlucHV0LmlucHV0bWFzaywgaW5wdXRWYWx1ZSA9IG5wdHZsLnNsaWNlKCksIGNoYXJDb2RlcyA9IFwiXCIsIGluaXRpYWxOZHggPSAtMSwgcmVzdWx0ID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzVGVtcGxhdGVNYXRjaChuZHgsIGNoYXJDb2Rlcykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB0YXJnZXRUZW1wbGF0ZSA9IGdldE1hc2tUZW1wbGF0ZSghMCwgMCkuc2xpY2UobmR4LCBzZWVrTmV4dChuZHgpKS5qb2luKFwiXCIpLnJlcGxhY2UoLycvZywgXCJcIiksIGNoYXJDb2RlTmR4ID0gdGFyZ2V0VGVtcGxhdGUuaW5kZXhPZihjaGFyQ29kZXMpOyAwIDwgY2hhckNvZGVOZHggJiYgXCIgXCIgPT09IHRhcmdldFRlbXBsYXRlW2NoYXJDb2RlTmR4IC0gMV07ICkgY2hhckNvZGVOZHgtLTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gMCA9PT0gY2hhckNvZGVOZHggJiYgIWlzTWFzayhuZHgpICYmIChnZXRUZXN0KG5keCkubWF0Y2gubmF0aXZlRGVmID09PSBjaGFyQ29kZXMuY2hhckF0KDApIHx8ICEwID09PSBnZXRUZXN0KG5keCkubWF0Y2guc3RhdGljICYmIGdldFRlc3QobmR4KS5tYXRjaC5uYXRpdmVEZWYgPT09IFwiJ1wiICsgY2hhckNvZGVzLmNoYXJBdCgwKSB8fCBcIiBcIiA9PT0gZ2V0VGVzdChuZHgpLm1hdGNoLm5hdGl2ZURlZiAmJiAoZ2V0VGVzdChuZHggKyAxKS5tYXRjaC5uYXRpdmVEZWYgPT09IGNoYXJDb2Rlcy5jaGFyQXQoMCkgfHwgITAgPT09IGdldFRlc3QobmR4ICsgMSkubWF0Y2guc3RhdGljICYmIGdldFRlc3QobmR4ICsgMSkubWF0Y2gubmF0aXZlRGVmID09PSBcIidcIiArIGNoYXJDb2Rlcy5jaGFyQXQoMCkpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRjaCAmJiAwIDwgY2hhckNvZGVOZHggJiYgIWlzTWFzayhuZHgsICExLCAhMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0UG9zID0gc2Vla05leHQobmR4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0bWFzay5jYXJldFBvcy5iZWdpbiA8IG5leHRQb3MgJiYgKGlucHV0bWFzay5jYXJldFBvcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbjogbmV4dFBvc1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXNldE1hc2tTZXQoKSwgbWFza3NldC50ZXN0cyA9IHt9LCBpbml0aWFsTmR4ID0gb3B0cy5yYWRpeFBvaW50ID8gZGV0ZXJtaW5lTmV3Q2FyZXRQb3NpdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAwLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IDBcbiAgICAgICAgICAgICAgICB9KS5iZWdpbiA6IDAsIG1hc2tzZXQucCA9IGluaXRpYWxOZHgsIGlucHV0bWFzay5jYXJldFBvcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46IGluaXRpYWxOZHhcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHZhciBzdGF0aWNNYXRjaGVzID0gW10sIHByZXZDYXJldFBvcyA9IGlucHV0bWFzay5jYXJldFBvcztcbiAgICAgICAgICAgICAgICBpZiAoJC5lYWNoKGlucHV0VmFsdWUsIGZ1bmN0aW9uKG5keCwgY2hhckNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gY2hhckNvZGUpIGlmICh2b2lkIDAgPT09IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbbmR4XSAmJiBpbnB1dFZhbHVlW25keF0gPT09IGdldFBsYWNlaG9sZGVyKG5keCkgJiYgaXNNYXNrKG5keCwgITApICYmICExID09PSBpc1ZhbGlkKG5keCwgaW5wdXRWYWx1ZVtuZHhdLCAhMCwgdm9pZCAwLCB2b2lkIDAsICEwKSkgbWFza3NldC5wKys7IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleXByZXNzID0gbmV3ICQuRXZlbnQoXCJfY2hlY2t2YWxcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlwcmVzcy53aGljaCA9IGNoYXJDb2RlLnRvU3RyaW5nKCkuY2hhckNvZGVBdCgwKSwgY2hhckNvZGVzICs9IGNoYXJDb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGx2cCA9IGdldExhc3RWYWxpZFBvc2l0aW9uKHZvaWQgMCwgITApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNUZW1wbGF0ZU1hdGNoKGluaXRpYWxOZHgsIGNoYXJDb2RlcykgPyByZXN1bHQgPSBFdmVudEhhbmRsZXJzLmtleXByZXNzRXZlbnQuY2FsbChpbnB1dCwga2V5cHJlc3MsICEwLCAhMSwgc3RyaWN0LCBsdnAgKyAxKSA6IChyZXN1bHQgPSBFdmVudEhhbmRsZXJzLmtleXByZXNzRXZlbnQuY2FsbChpbnB1dCwga2V5cHJlc3MsICEwLCAhMSwgc3RyaWN0LCBpbnB1dG1hc2suY2FyZXRQb3MuYmVnaW4pLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCAmJiAoaW5pdGlhbE5keCA9IGlucHV0bWFzay5jYXJldFBvcy5iZWdpbiArIDEsIGNoYXJDb2RlcyA9IFwiXCIpKSwgcmVzdWx0ID8gKHZvaWQgMCAhPT0gcmVzdWx0LnBvcyAmJiBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW3Jlc3VsdC5wb3NdICYmICEwID09PSBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW3Jlc3VsdC5wb3NdLm1hdGNoLnN0YXRpYyAmJiB2b2lkIDAgPT09IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcmVzdWx0LnBvc10uYWx0ZXJuYXRpb24gJiYgKHN0YXRpY01hdGNoZXMucHVzaChyZXN1bHQucG9zKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1JUTCB8fCAocmVzdWx0LmZvcndhcmRQb3NpdGlvbiA9IHJlc3VsdC5wb3MgKyAxKSksIHdyaXRlQnVmZmVyKHZvaWQgMCwgZ2V0QnVmZmVyKCksIHJlc3VsdC5mb3J3YXJkUG9zaXRpb24sIGtleXByZXNzLCAhMSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRtYXNrLmNhcmV0UG9zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiByZXN1bHQuZm9yd2FyZFBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogcmVzdWx0LmZvcndhcmRQb3NpdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcHJldkNhcmV0UG9zID0gaW5wdXRtYXNrLmNhcmV0UG9zKSA6IGlucHV0bWFzay5jYXJldFBvcyA9IHByZXZDYXJldFBvcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLCAwIDwgc3RhdGljTWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNuZHgsIHZhbGlkUG9zLCBuZXh0VmFsaWQgPSBzZWVrTmV4dCgtMSwgdm9pZCAwLCAhMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNDb21wbGV0ZShnZXRCdWZmZXIoKSkgJiYgc3RhdGljTWF0Y2hlcy5sZW5ndGggPD0gbmV4dFZhbGlkIHx8IGlzQ29tcGxldGUoZ2V0QnVmZmVyKCkpICYmIDAgPCBzdGF0aWNNYXRjaGVzLmxlbmd0aCAmJiBzdGF0aWNNYXRjaGVzLmxlbmd0aCAhPT0gbmV4dFZhbGlkICYmIDAgPT09IHN0YXRpY01hdGNoZXNbMF0pIGZvciAodmFyIG5leHRTbmR4ID0gbmV4dFZhbGlkOyB2b2lkIDAgIT09IChzbmR4ID0gc3RhdGljTWF0Y2hlcy5zaGlmdCgpKTsgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5cHJlc3MgPSBuZXcgJC5FdmVudChcIl9jaGVja3ZhbFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZFBvcyA9IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbc25keF0sIHZhbGlkUG9zLmdlbmVyYXRlZElucHV0ID0gITAsIGtleXByZXNzLndoaWNoID0gdmFsaWRQb3MuaW5wdXQuY2hhckNvZGVBdCgwKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBFdmVudEhhbmRsZXJzLmtleXByZXNzRXZlbnQuY2FsbChpbnB1dCwga2V5cHJlc3MsICEwLCAhMSwgc3RyaWN0LCBuZXh0U25keCksIFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICYmIHZvaWQgMCAhPT0gcmVzdWx0LnBvcyAmJiByZXN1bHQucG9zICE9PSBzbmR4ICYmIG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcmVzdWx0LnBvc10gJiYgITAgPT09IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcmVzdWx0LnBvc10ubWF0Y2guc3RhdGljKSBzdGF0aWNNYXRjaGVzLnB1c2gocmVzdWx0LnBvcyk7IGVsc2UgaWYgKCFyZXN1bHQpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFNuZHgrKztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGZvciAoO3NuZHggPSBzdGF0aWNNYXRjaGVzLnBvcCgpOyApIHZhbGlkUG9zID0gbWFza3NldC52YWxpZFBvc2l0aW9uc1tzbmR4XSwgXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkUG9zICYmICh2YWxpZFBvcy5nZW5lcmF0ZWRJbnB1dCA9ICEwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHdyaXRlT3V0KSBmb3IgKHZhciB2bmR4IGluIHdyaXRlQnVmZmVyKGlucHV0LCBnZXRCdWZmZXIoKSwgcmVzdWx0ID8gcmVzdWx0LmZvcndhcmRQb3NpdGlvbiA6IHZvaWQgMCwgaW5pdGlhdGluZ0V2ZW50IHx8IG5ldyAkLkV2ZW50KFwiY2hlY2t2YWxcIiksIGluaXRpYXRpbmdFdmVudCAmJiBcImlucHV0XCIgPT09IGluaXRpYXRpbmdFdmVudC50eXBlKSwgXG4gICAgICAgICAgICAgICAgbWFza3NldC52YWxpZFBvc2l0aW9ucykgITAgIT09IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbdm5keF0ubWF0Y2guZ2VuZXJhdGVkICYmIGRlbGV0ZSBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW3ZuZHhdLmdlbmVyYXRlZElucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gdW5tYXNrZWR2YWx1ZShpbnB1dCkge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodm9pZCAwID09PSBpbnB1dC5pbnB1dG1hc2spIHJldHVybiBpbnB1dC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQuaW5wdXRtYXNrICYmIGlucHV0LmlucHV0bWFzay5yZWZyZXNoVmFsdWUgJiYgYXBwbHlJbnB1dFZhbHVlKGlucHV0LCBpbnB1dC5pbnB1dG1hc2suX3ZhbHVlR2V0KCEwKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciB1bVZhbHVlID0gW10sIHZwcyA9IG1hc2tzZXQudmFsaWRQb3NpdGlvbnM7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgcG5keCBpbiB2cHMpIHZwc1twbmR4XSAmJiB2cHNbcG5keF0ubWF0Y2ggJiYgKDEgIT0gdnBzW3BuZHhdLm1hdGNoLnN0YXRpYyB8fCAhMCAhPT0gdnBzW3BuZHhdLmdlbmVyYXRlZElucHV0KSAmJiB1bVZhbHVlLnB1c2godnBzW3BuZHhdLmlucHV0KTtcbiAgICAgICAgICAgICAgICB2YXIgdW5tYXNrZWRWYWx1ZSA9IDAgPT09IHVtVmFsdWUubGVuZ3RoID8gXCJcIiA6IChpc1JUTCA/IHVtVmFsdWUucmV2ZXJzZSgpIDogdW1WYWx1ZSkuam9pbihcIlwiKTtcbiAgICAgICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKG9wdHMub25Vbk1hc2spKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXJWYWx1ZSA9IChpc1JUTCA/IGdldEJ1ZmZlcigpLnNsaWNlKCkucmV2ZXJzZSgpIDogZ2V0QnVmZmVyKCkpLmpvaW4oXCJcIik7XG4gICAgICAgICAgICAgICAgICAgIHVubWFza2VkVmFsdWUgPSBvcHRzLm9uVW5NYXNrLmNhbGwoaW5wdXRtYXNrLCBidWZmZXJWYWx1ZSwgdW5tYXNrZWRWYWx1ZSwgb3B0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1bm1hc2tlZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gdHJhbnNsYXRlUG9zaXRpb24ocG9zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFpc1JUTCB8fCBcIm51bWJlclwiICE9IHR5cGVvZiBwb3MgfHwgb3B0cy5ncmVlZHkgJiYgXCJcIiA9PT0gb3B0cy5wbGFjZWhvbGRlciB8fCAhZWwgfHwgKHBvcyA9IGVsLmlucHV0bWFzay5fdmFsdWVHZXQoKS5sZW5ndGggLSBwb3MpLCBcbiAgICAgICAgICAgICAgICBwb3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjYXJldChpbnB1dCwgYmVnaW4sIGVuZCwgbm90cmFuc2xhdGUsIGlzRGVsZXRlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJhbmdlO1xuICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgPT09IGJlZ2luKSByZXR1cm4gXCJzZWxlY3Rpb25TdGFydFwiIGluIGlucHV0ICYmIFwic2VsZWN0aW9uRW5kXCIgaW4gaW5wdXQgPyAoYmVnaW4gPSBpbnB1dC5zZWxlY3Rpb25TdGFydCwgXG4gICAgICAgICAgICAgICAgZW5kID0gaW5wdXQuc2VsZWN0aW9uRW5kKSA6IHdpbmRvdy5nZXRTZWxlY3Rpb24gPyAocmFuZ2UgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuZ2V0UmFuZ2VBdCgwKSwgXG4gICAgICAgICAgICAgICAgcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIucGFyZW50Tm9kZSAhPT0gaW5wdXQgJiYgcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIgIT09IGlucHV0IHx8IChiZWdpbiA9IHJhbmdlLnN0YXJ0T2Zmc2V0LCBcbiAgICAgICAgICAgICAgICBlbmQgPSByYW5nZS5lbmRPZmZzZXQpKSA6IGRvY3VtZW50LnNlbGVjdGlvbiAmJiBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UgJiYgKHJhbmdlID0gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCksIFxuICAgICAgICAgICAgICAgIGJlZ2luID0gMCAtIHJhbmdlLmR1cGxpY2F0ZSgpLm1vdmVTdGFydChcImNoYXJhY3RlclwiLCAtaW5wdXQuaW5wdXRtYXNrLl92YWx1ZUdldCgpLmxlbmd0aCksIFxuICAgICAgICAgICAgICAgIGVuZCA9IGJlZ2luICsgcmFuZ2UudGV4dC5sZW5ndGgpLCB7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiBub3RyYW5zbGF0ZSA/IGJlZ2luIDogdHJhbnNsYXRlUG9zaXRpb24oYmVnaW4pLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IG5vdHJhbnNsYXRlID8gZW5kIDogdHJhbnNsYXRlUG9zaXRpb24oZW5kKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKCQuaXNBcnJheShiZWdpbikgJiYgKGVuZCA9IGlzUlRMID8gYmVnaW5bMF0gOiBiZWdpblsxXSwgYmVnaW4gPSBpc1JUTCA/IGJlZ2luWzFdIDogYmVnaW5bMF0pLCBcbiAgICAgICAgICAgICAgICB2b2lkIDAgIT09IGJlZ2luLmJlZ2luICYmIChlbmQgPSBpc1JUTCA/IGJlZ2luLmJlZ2luIDogYmVnaW4uZW5kLCBiZWdpbiA9IGlzUlRMID8gYmVnaW4uZW5kIDogYmVnaW4uYmVnaW4pLCBcbiAgICAgICAgICAgICAgICBcIm51bWJlclwiID09IHR5cGVvZiBiZWdpbikge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbiA9IG5vdHJhbnNsYXRlID8gYmVnaW4gOiB0cmFuc2xhdGVQb3NpdGlvbihiZWdpbiksIGVuZCA9IG5vdHJhbnNsYXRlID8gZW5kIDogdHJhbnNsYXRlUG9zaXRpb24oZW5kKSwgXG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IFwibnVtYmVyXCIgPT0gdHlwZW9mIGVuZCA/IGVuZCA6IGJlZ2luO1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2Nyb2xsQ2FsYyA9IHBhcnNlSW50KCgoaW5wdXQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cpLmdldENvbXB1dGVkU3R5bGUgPyAoaW5wdXQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cpLmdldENvbXB1dGVkU3R5bGUoaW5wdXQsIG51bGwpIDogaW5wdXQuY3VycmVudFN0eWxlKS5mb250U2l6ZSkgKiBlbmQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zY3JvbGxMZWZ0ID0gc2Nyb2xsQ2FsYyA+IGlucHV0LnNjcm9sbFdpZHRoID8gc2Nyb2xsQ2FsYyA6IDAsIGlucHV0LmlucHV0bWFzay5jYXJldFBvcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiBiZWdpbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogZW5kXG4gICAgICAgICAgICAgICAgICAgIH0sIG9wdHMuaW5zZXJ0TW9kZVZpc3VhbCAmJiAhMSA9PT0gb3B0cy5pbnNlcnRNb2RlICYmIGJlZ2luID09PSBlbmQgJiYgKGlzRGVsZXRlIHx8IGVuZCsrKSwgXG4gICAgICAgICAgICAgICAgICAgIGlucHV0ID09PSAoaW5wdXQuaW5wdXRtYXNrLnNoYWRvd1Jvb3QgfHwgZG9jdW1lbnQpLmFjdGl2ZUVsZW1lbnQpIGlmIChcInNldFNlbGVjdGlvblJhbmdlXCIgaW4gaW5wdXQpIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKGJlZ2luLCBlbmQpOyBlbHNlIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLCB2b2lkIDAgPT09IGlucHV0LmZpcnN0Q2hpbGQgfHwgbnVsbCA9PT0gaW5wdXQuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LmFwcGVuZENoaWxkKHRleHROb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlLnNldFN0YXJ0KGlucHV0LmZpcnN0Q2hpbGQsIGJlZ2luIDwgaW5wdXQuaW5wdXRtYXNrLl92YWx1ZUdldCgpLmxlbmd0aCA/IGJlZ2luIDogaW5wdXQuaW5wdXRtYXNrLl92YWx1ZUdldCgpLmxlbmd0aCksIFxuICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kKGlucHV0LmZpcnN0Q2hpbGQsIGVuZCA8IGlucHV0LmlucHV0bWFzay5fdmFsdWVHZXQoKS5sZW5ndGggPyBlbmQgOiBpbnB1dC5pbnB1dG1hc2suX3ZhbHVlR2V0KCkubGVuZ3RoKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZS5jb2xsYXBzZSghMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpLCBzZWwuYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaW5wdXQuY3JlYXRlVGV4dFJhbmdlICYmIChyYW5nZSA9IGlucHV0LmNyZWF0ZVRleHRSYW5nZSgpLCByYW5nZS5jb2xsYXBzZSghMCksIFxuICAgICAgICAgICAgICAgICAgICByYW5nZS5tb3ZlRW5kKFwiY2hhcmFjdGVyXCIsIGVuZCksIHJhbmdlLm1vdmVTdGFydChcImNoYXJhY3RlclwiLCBiZWdpbiksIHJhbmdlLnNlbGVjdCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBkZXRlcm1pbmVMYXN0UmVxdWlyZWRQb3NpdGlvbihyZXR1cm5EZWZpbml0aW9uKSB7XG4gICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGdldE1hc2tUZW1wbGF0ZSghMCwgZ2V0TGFzdFZhbGlkUG9zaXRpb24oKSwgITAsICEwKSwgYmwgPSBidWZmZXIubGVuZ3RoLCBwb3MsIGx2cCA9IGdldExhc3RWYWxpZFBvc2l0aW9uKCksIHBvc2l0aW9ucyA9IHt9LCBsdlRlc3QgPSBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW2x2cF0sIG5keEludGx6ciA9IHZvaWQgMCAhPT0gbHZUZXN0ID8gbHZUZXN0LmxvY2F0b3Iuc2xpY2UoKSA6IHZvaWQgMCwgdGVzdFBvcztcbiAgICAgICAgICAgICAgICBmb3IgKHBvcyA9IGx2cCArIDE7IHBvcyA8IGJ1ZmZlci5sZW5ndGg7IHBvcysrKSB0ZXN0UG9zID0gZ2V0VGVzdFRlbXBsYXRlKHBvcywgbmR4SW50bHpyLCBwb3MgLSAxKSwgXG4gICAgICAgICAgICAgICAgbmR4SW50bHpyID0gdGVzdFBvcy5sb2NhdG9yLnNsaWNlKCksIHBvc2l0aW9uc1twb3NdID0gJC5leHRlbmQoITAsIHt9LCB0ZXN0UG9zKTtcbiAgICAgICAgICAgICAgICB2YXIgbHZUZXN0QWx0ID0gbHZUZXN0ICYmIHZvaWQgMCAhPT0gbHZUZXN0LmFsdGVybmF0aW9uID8gbHZUZXN0LmxvY2F0b3JbbHZUZXN0LmFsdGVybmF0aW9uXSA6IHZvaWQgMDtcbiAgICAgICAgICAgICAgICBmb3IgKHBvcyA9IGJsIC0gMTsgbHZwIDwgcG9zICYmICh0ZXN0UG9zID0gcG9zaXRpb25zW3Bvc10sICh0ZXN0UG9zLm1hdGNoLm9wdGlvbmFsaXR5IHx8IHRlc3RQb3MubWF0Y2gub3B0aW9uYWxRdWFudGlmaWVyICYmIHRlc3RQb3MubWF0Y2gubmV3QmxvY2tNYXJrZXIgfHwgbHZUZXN0QWx0ICYmIChsdlRlc3RBbHQgIT09IHBvc2l0aW9uc1twb3NdLmxvY2F0b3JbbHZUZXN0LmFsdGVybmF0aW9uXSAmJiAxICE9IHRlc3RQb3MubWF0Y2guc3RhdGljIHx8ICEwID09PSB0ZXN0UG9zLm1hdGNoLnN0YXRpYyAmJiB0ZXN0UG9zLmxvY2F0b3JbbHZUZXN0LmFsdGVybmF0aW9uXSAmJiBjaGVja0FsdGVybmF0aW9uTWF0Y2godGVzdFBvcy5sb2NhdG9yW2x2VGVzdC5hbHRlcm5hdGlvbl0udG9TdHJpbmcoKS5zcGxpdChcIixcIiksIGx2VGVzdEFsdC50b1N0cmluZygpLnNwbGl0KFwiLFwiKSkgJiYgXCJcIiAhPT0gZ2V0VGVzdHMocG9zKVswXS5kZWYpKSAmJiBidWZmZXJbcG9zXSA9PT0gZ2V0UGxhY2Vob2xkZXIocG9zLCB0ZXN0UG9zLm1hdGNoKSk7IHBvcy0tKSBibC0tO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5EZWZpbml0aW9uID8ge1xuICAgICAgICAgICAgICAgICAgICBsOiBibCxcbiAgICAgICAgICAgICAgICAgICAgZGVmOiBwb3NpdGlvbnNbYmxdID8gcG9zaXRpb25zW2JsXS5tYXRjaCA6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0gOiBibDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNsZWFyT3B0aW9uYWxUYWlsKGJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIGJ1ZmZlci5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHRlbXBsYXRlID0gZ2V0TWFza1RlbXBsYXRlKCEwLCAwLCAhMCwgdm9pZCAwLCAhMCksIGxtbnQ7IHZvaWQgMCAhPT0gKGxtbnQgPSB0ZW1wbGF0ZS5zaGlmdCgpKTsgKSBidWZmZXIucHVzaChsbW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXNDb21wbGV0ZShidWZmZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKG9wdHMuaXNDb21wbGV0ZSkpIHJldHVybiBvcHRzLmlzQ29tcGxldGUoYnVmZmVyLCBvcHRzKTtcbiAgICAgICAgICAgICAgICBpZiAoXCIqXCIgIT09IG9wdHMucmVwZWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb21wbGV0ZSA9ICExLCBscnAgPSBkZXRlcm1pbmVMYXN0UmVxdWlyZWRQb3NpdGlvbighMCksIGFtbCA9IHNlZWtQcmV2aW91cyhscnAubCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgPT09IGxycC5kZWYgfHwgbHJwLmRlZi5uZXdCbG9ja01hcmtlciB8fCBscnAuZGVmLm9wdGlvbmFsaXR5IHx8IGxycC5kZWYub3B0aW9uYWxRdWFudGlmaWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSA9ICEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gYW1sOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVzdCA9IGdldFRlc3RUZW1wbGF0ZShpKS5tYXRjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoITAgIT09IHRlc3Quc3RhdGljICYmIHZvaWQgMCA9PT0gbWFza3NldC52YWxpZFBvc2l0aW9uc1tpXSAmJiAhMCAhPT0gdGVzdC5vcHRpb25hbGl0eSAmJiAhMCAhPT0gdGVzdC5vcHRpb25hbFF1YW50aWZpZXIgfHwgITAgPT09IHRlc3Quc3RhdGljICYmIGJ1ZmZlcltpXSAhPT0gZ2V0UGxhY2Vob2xkZXIoaSwgdGVzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGUgPSAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBoYW5kbGVSZW1vdmUoaW5wdXQsIGssIHBvcywgc3RyaWN0LCBmcm9tSXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIGlmICgob3B0cy5udW1lcmljSW5wdXQgfHwgaXNSVEwpICYmIChrID09PSBrZXlDb2RlLkJBQ0tTUEFDRSA/IGsgPSBrZXlDb2RlLkRFTEVURSA6IGsgPT09IGtleUNvZGUuREVMRVRFICYmIChrID0ga2V5Q29kZS5CQUNLU1BBQ0UpLCBcbiAgICAgICAgICAgICAgICBpc1JUTCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBlbmQgPSBwb3MuZW5kO1xuICAgICAgICAgICAgICAgICAgICBwb3MuZW5kID0gcG9zLmJlZ2luLCBwb3MuYmVnaW4gPSBwZW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgbHZwID0gZ2V0TGFzdFZhbGlkUG9zaXRpb24odm9pZCAwLCAhMCksIG9mZnNldDtcbiAgICAgICAgICAgICAgICBpZiAocG9zLmVuZCA+PSBnZXRCdWZmZXIoKS5sZW5ndGggJiYgbHZwID49IHBvcy5lbmQgJiYgKHBvcy5lbmQgPSBsdnAgKyAxKSwgayA9PT0ga2V5Q29kZS5CQUNLU1BBQ0UgPyBwb3MuZW5kIC0gcG9zLmJlZ2luIDwgMSAmJiAocG9zLmJlZ2luID0gc2Vla1ByZXZpb3VzKHBvcy5iZWdpbikpIDogayA9PT0ga2V5Q29kZS5ERUxFVEUgJiYgcG9zLmJlZ2luID09PSBwb3MuZW5kICYmIChwb3MuZW5kID0gaXNNYXNrKHBvcy5lbmQsICEwLCAhMCkgPyBwb3MuZW5kICsgMSA6IHNlZWtOZXh0KHBvcy5lbmQpICsgMSksIFxuICAgICAgICAgICAgICAgICExICE9PSAob2Zmc2V0ID0gcmV2YWxpZGF0ZU1hc2socG9zKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEwICE9PSBzdHJpY3QgJiYgITEgIT09IG9wdHMua2VlcFN0YXRpYyB8fCBudWxsICE9PSBvcHRzLnJlZ2V4ICYmIC0xICE9PSBnZXRUZXN0KHBvcy5iZWdpbikubWF0Y2guZGVmLmluZGV4T2YoXCJ8XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYWx0ZXJuYXRlKCEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3UG9zID0gdm9pZCAwICE9PSByZXN1bHQuY2FyZXQgPyByZXN1bHQuY2FyZXQgOiByZXN1bHQucG9zID8gc2Vla05leHQocmVzdWx0LnBvcy5iZWdpbiA/IHJlc3VsdC5wb3MuYmVnaW4gOiByZXN1bHQucG9zKSA6IGdldExhc3RWYWxpZFBvc2l0aW9uKC0xLCAhMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGsgIT09IGtleUNvZGUuREVMRVRFIHx8IHBvcy5iZWdpbiA+IG5ld1BvcykgJiYgcG9zLmJlZ2luO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICEwICE9PSBzdHJpY3QgJiYgKG1hc2tzZXQucCA9IGsgPT09IGtleUNvZGUuREVMRVRFID8gcG9zLmJlZ2luICsgb2Zmc2V0IDogcG9zLmJlZ2luKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBhcHBseUlucHV0VmFsdWUoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQuaW5wdXRtYXNrLnJlZnJlc2hWYWx1ZSA9ICExLCAkLmlzRnVuY3Rpb24ob3B0cy5vbkJlZm9yZU1hc2spICYmICh2YWx1ZSA9IG9wdHMub25CZWZvcmVNYXNrLmNhbGwoaW5wdXRtYXNrLCB2YWx1ZSwgb3B0cykgfHwgdmFsdWUpLCBcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoXCJcIiksIGNoZWNrVmFsKGlucHV0LCAhMCwgITEsIHZhbHVlKSwgdW5kb1ZhbHVlID0gZ2V0QnVmZmVyKCkuam9pbihcIlwiKSwgXG4gICAgICAgICAgICAgICAgKG9wdHMuY2xlYXJNYXNrT25Mb3N0Rm9jdXMgfHwgb3B0cy5jbGVhckluY29tcGxldGUpICYmIGlucHV0LmlucHV0bWFzay5fdmFsdWVHZXQoKSA9PT0gZ2V0QnVmZmVyVGVtcGxhdGUoKS5qb2luKFwiXCIpICYmIC0xID09PSBnZXRMYXN0VmFsaWRQb3NpdGlvbigpICYmIGlucHV0LmlucHV0bWFzay5fdmFsdWVTZXQoXCJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBtYXNrKGVsZW0pIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc0VsZW1lbnRUeXBlU3VwcG9ydGVkKGlucHV0LCBvcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBhdGNoVmFsdWVQcm9wZXJ0eShucHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZUdldCwgdmFsdWVTZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwYXRjaFZhbGhvb2sodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkLnZhbEhvb2tzICYmICh2b2lkIDAgPT09ICQudmFsSG9va3NbdHlwZV0gfHwgITAgIT09ICQudmFsSG9va3NbdHlwZV0uaW5wdXRtYXNrcGF0Y2gpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWxob29rR2V0ID0gJC52YWxIb29rc1t0eXBlXSAmJiAkLnZhbEhvb2tzW3R5cGVdLmdldCA/ICQudmFsSG9va3NbdHlwZV0uZ2V0IDogZnVuY3Rpb24oZWxlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHZhbGhvb2tTZXQgPSAkLnZhbEhvb2tzW3R5cGVdICYmICQudmFsSG9va3NbdHlwZV0uc2V0ID8gJC52YWxIb29rc1t0eXBlXS5zZXQgOiBmdW5jdGlvbihlbGVtLCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0udmFsdWUgPSB2YWx1ZSwgZWxlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC52YWxIb29rc1t0eXBlXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGVsZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbS5pbnB1dG1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW0uaW5wdXRtYXNrLm9wdHMuYXV0b1VubWFzaykgcmV0dXJuIGVsZW0uaW5wdXRtYXNrLnVubWFza2VkdmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHZhbGhvb2tHZXQoZWxlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMSAhPT0gZ2V0TGFzdFZhbGlkUG9zaXRpb24odm9pZCAwLCB2b2lkIDAsIGVsZW0uaW5wdXRtYXNrLm1hc2tzZXQudmFsaWRQb3NpdGlvbnMpIHx8ICEwICE9PSBvcHRzLm51bGxhYmxlID8gcmVzdWx0IDogXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbGhvb2tHZXQoZWxlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoZWxlbSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdmFsaG9va1NldChlbGVtLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uaW5wdXRtYXNrICYmIGFwcGx5SW5wdXRWYWx1ZShlbGVtLCB2YWx1ZSksIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dG1hc2twYXRjaDogITBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXR0ZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRtYXNrID8gdGhpcy5pbnB1dG1hc2sub3B0cy5hdXRvVW5tYXNrID8gdGhpcy5pbnB1dG1hc2sudW5tYXNrZWR2YWx1ZSgpIDogLTEgIT09IGdldExhc3RWYWxpZFBvc2l0aW9uKCkgfHwgITAgIT09IG9wdHMubnVsbGFibGUgPyAodGhpcy5pbnB1dG1hc2suc2hhZG93Um9vdCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSA9PT0gdGhpcyAmJiBvcHRzLmNsZWFyTWFza09uTG9zdEZvY3VzID8gKGlzUlRMID8gY2xlYXJPcHRpb25hbFRhaWwoZ2V0QnVmZmVyKCkuc2xpY2UoKSkucmV2ZXJzZSgpIDogY2xlYXJPcHRpb25hbFRhaWwoZ2V0QnVmZmVyKCkuc2xpY2UoKSkpLmpvaW4oXCJcIikgOiB2YWx1ZUdldC5jYWxsKHRoaXMpIDogXCJcIiA6IHZhbHVlR2V0LmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzZXR0ZXIodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVNldC5jYWxsKHRoaXMsIHZhbHVlKSwgdGhpcy5pbnB1dG1hc2sgJiYgYXBwbHlJbnB1dFZhbHVlKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGluc3RhbGxOYXRpdmVWYWx1ZVNldEZhbGxiYWNrKG5wdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50UnVsZXIub24obnB0LCBcIm1vdXNlZW50ZXJcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMsIHZhbHVlID0gdGhpcy5pbnB1dG1hc2suX3ZhbHVlR2V0KCEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgIT09IChpc1JUTCA/IGdldEJ1ZmZlcigpLnJldmVyc2UoKSA6IGdldEJ1ZmZlcigpKS5qb2luKFwiXCIpICYmIGFwcGx5SW5wdXRWYWx1ZSh0aGlzLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5wdC5pbnB1dG1hc2suX192YWx1ZUdldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghMCAhPT0gb3B0cy5ub1ZhbHVlUGF0Y2hpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgT2JqZWN0LmdldFByb3RvdHlwZU9mICYmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YgPSBcIm9iamVjdFwiID09PSBfdHlwZW9mKFwidGVzdFwiLl9fcHJvdG9fXykgPyBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fcHJvdG9fXztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlUHJvcGVydHkgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5nZXRQcm90b3R5cGVPZihucHQpLCBcInZhbHVlXCIpIDogdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVQcm9wZXJ0eSAmJiB2YWx1ZVByb3BlcnR5LmdldCAmJiB2YWx1ZVByb3BlcnR5LnNldCA/ICh2YWx1ZUdldCA9IHZhbHVlUHJvcGVydHkuZ2V0LCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlU2V0ID0gdmFsdWVQcm9wZXJ0eS5zZXQsIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucHQsIFwidmFsdWVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZ2V0dGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldDogc2V0dGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKSA6IFwiaW5wdXRcIiAhPT0gbnB0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSAmJiAodmFsdWVHZXQgPSBmdW5jdGlvbiB2YWx1ZUdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0Q29udGVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHZhbHVlU2V0ID0gZnVuY3Rpb24gdmFsdWVTZXQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkobnB0LCBcInZhbHVlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGdldHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IHNldHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBkb2N1bWVudC5fX2xvb2t1cEdldHRlcl9fICYmIG5wdC5fX2xvb2t1cEdldHRlcl9fKFwidmFsdWVcIikgJiYgKHZhbHVlR2V0ID0gbnB0Ll9fbG9va3VwR2V0dGVyX18oXCJ2YWx1ZVwiKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlU2V0ID0gbnB0Ll9fbG9va3VwU2V0dGVyX18oXCJ2YWx1ZVwiKSwgbnB0Ll9fZGVmaW5lR2V0dGVyX18oXCJ2YWx1ZVwiLCBnZXR0ZXIpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnB0Ll9fZGVmaW5lU2V0dGVyX18oXCJ2YWx1ZVwiLCBzZXR0ZXIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnB0LmlucHV0bWFzay5fX3ZhbHVlR2V0ID0gdmFsdWVHZXQsIG5wdC5pbnB1dG1hc2suX192YWx1ZVNldCA9IHZhbHVlU2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBucHQuaW5wdXRtYXNrLl92YWx1ZUdldCA9IGZ1bmN0aW9uKG92ZXJydWxlUlRMKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpc1JUTCAmJiAhMCAhPT0gb3ZlcnJ1bGVSVEwgPyB2YWx1ZUdldC5jYWxsKHRoaXMuZWwpLnNwbGl0KFwiXCIpLnJldmVyc2UoKS5qb2luKFwiXCIpIDogdmFsdWVHZXQuY2FsbCh0aGlzLmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBucHQuaW5wdXRtYXNrLl92YWx1ZVNldCA9IGZ1bmN0aW9uKHZhbHVlLCBvdmVycnVsZVJUTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVNldC5jYWxsKHRoaXMuZWwsIG51bGwgPT0gdmFsdWUgPyBcIlwiIDogITAgIT09IG92ZXJydWxlUlRMICYmIGlzUlRMID8gdmFsdWUuc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIikgOiB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdm9pZCAwID09PSB2YWx1ZUdldCAmJiAodmFsdWVHZXQgPSBmdW5jdGlvbiB2YWx1ZUdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdmFsdWVTZXQgPSBmdW5jdGlvbiB2YWx1ZVNldCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgcGF0Y2hWYWxob29rKG5wdC50eXBlKSwgaW5zdGFsbE5hdGl2ZVZhbHVlU2V0RmFsbGJhY2sobnB0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0YXJlYVwiICE9PSBpbnB1dC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgJiYgb3B0cy5pZ25vcmFibGVzLnB1c2goa2V5Q29kZS5FTlRFUik7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50VHlwZSA9IGlucHV0LmdldEF0dHJpYnV0ZShcInR5cGVcIiksIGlzU3VwcG9ydGVkID0gXCJpbnB1dFwiID09PSBpbnB1dC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgJiYgLTEgIT09ICQuaW5BcnJheShlbGVtZW50VHlwZSwgb3B0cy5zdXBwb3J0c0lucHV0VHlwZSkgfHwgaW5wdXQuaXNDb250ZW50RWRpdGFibGUgfHwgXCJ0ZXh0YXJlYVwiID09PSBpbnB1dC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNTdXBwb3J0ZWQpIGlmIChcImlucHV0XCIgPT09IGlucHV0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBlbGVtZW50VHlwZSksIGlzU3VwcG9ydGVkID0gXCJ0ZXh0XCIgPT09IGVsLnR5cGUsIGVsID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlzU3VwcG9ydGVkID0gXCJwYXJ0aWFsXCI7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhMSAhPT0gaXNTdXBwb3J0ZWQgPyBwYXRjaFZhbHVlUHJvcGVydHkoaW5wdXQpIDogaW5wdXQuaW5wdXRtYXNrID0gdm9pZCAwLCBcbiAgICAgICAgICAgICAgICAgICAgaXNTdXBwb3J0ZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEV2ZW50UnVsZXIub2ZmKGVsZW0pO1xuICAgICAgICAgICAgICAgIHZhciBpc1N1cHBvcnRlZCA9IGlzRWxlbWVudFR5cGVTdXBwb3J0ZWQoZWxlbSwgb3B0cyk7XG4gICAgICAgICAgICAgICAgaWYgKCExICE9PSBpc1N1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICBlbCA9IGVsZW0sICRlbCA9ICQoZWwpLCBvcmlnaW5hbFBsYWNlaG9sZGVyID0gZWwucGxhY2Vob2xkZXIsIG1heExlbmd0aCA9IHZvaWQgMCAhPT0gZWwgPyBlbC5tYXhMZW5ndGggOiB2b2lkIDAsIFxuICAgICAgICAgICAgICAgICAgICAtMSA9PT0gbWF4TGVuZ3RoICYmIChtYXhMZW5ndGggPSB2b2lkIDApLCBcImlucHV0TW9kZVwiIGluIGVsICYmIG51bGwgPT09IGVsLmdldEF0dHJpYnV0ZShcImlucHV0bW9kZVwiKSAmJiAoZWwuaW5wdXRNb2RlID0gb3B0cy5pbnB1dG1vZGUsIFxuICAgICAgICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJpbnB1dG1vZGVcIiwgb3B0cy5pbnB1dG1vZGUpKSwgITAgPT09IGlzU3VwcG9ydGVkICYmIChvcHRzLnNob3dNYXNrT25Gb2N1cyA9IG9wdHMuc2hvd01hc2tPbkZvY3VzICYmIC0xID09PSBbIFwiY2MtbnVtYmVyXCIsIFwiY2MtZXhwXCIgXS5pbmRleE9mKGVsLmF1dG9jb21wbGV0ZSksIFxuICAgICAgICAgICAgICAgICAgICBpcGhvbmUgJiYgKG9wdHMuaW5zZXJ0TW9kZVZpc3VhbCA9ICExKSwgRXZlbnRSdWxlci5vbihlbCwgXCJzdWJtaXRcIiwgRXZlbnRIYW5kbGVycy5zdWJtaXRFdmVudCksIFxuICAgICAgICAgICAgICAgICAgICBFdmVudFJ1bGVyLm9uKGVsLCBcInJlc2V0XCIsIEV2ZW50SGFuZGxlcnMucmVzZXRFdmVudCksIEV2ZW50UnVsZXIub24oZWwsIFwiYmx1clwiLCBFdmVudEhhbmRsZXJzLmJsdXJFdmVudCksIFxuICAgICAgICAgICAgICAgICAgICBFdmVudFJ1bGVyLm9uKGVsLCBcImZvY3VzXCIsIEV2ZW50SGFuZGxlcnMuZm9jdXNFdmVudCksIEV2ZW50UnVsZXIub24oZWwsIFwiaW52YWxpZFwiLCBFdmVudEhhbmRsZXJzLmludmFsaWRFdmVudCksIFxuICAgICAgICAgICAgICAgICAgICBFdmVudFJ1bGVyLm9uKGVsLCBcImNsaWNrXCIsIEV2ZW50SGFuZGxlcnMuY2xpY2tFdmVudCksIEV2ZW50UnVsZXIub24oZWwsIFwibW91c2VsZWF2ZVwiLCBFdmVudEhhbmRsZXJzLm1vdXNlbGVhdmVFdmVudCksIFxuICAgICAgICAgICAgICAgICAgICBFdmVudFJ1bGVyLm9uKGVsLCBcIm1vdXNlZW50ZXJcIiwgRXZlbnRIYW5kbGVycy5tb3VzZWVudGVyRXZlbnQpLCBFdmVudFJ1bGVyLm9uKGVsLCBcInBhc3RlXCIsIEV2ZW50SGFuZGxlcnMucGFzdGVFdmVudCksIFxuICAgICAgICAgICAgICAgICAgICBFdmVudFJ1bGVyLm9uKGVsLCBcImN1dFwiLCBFdmVudEhhbmRsZXJzLmN1dEV2ZW50KSwgRXZlbnRSdWxlci5vbihlbCwgXCJjb21wbGV0ZVwiLCBvcHRzLm9uY29tcGxldGUpLCBcbiAgICAgICAgICAgICAgICAgICAgRXZlbnRSdWxlci5vbihlbCwgXCJpbmNvbXBsZXRlXCIsIG9wdHMub25pbmNvbXBsZXRlKSwgRXZlbnRSdWxlci5vbihlbCwgXCJjbGVhcmVkXCIsIG9wdHMub25jbGVhcmVkKSwgXG4gICAgICAgICAgICAgICAgICAgIG1vYmlsZSB8fCAhMCA9PT0gb3B0cy5pbnB1dEV2ZW50T25seSA/IGVsLnJlbW92ZUF0dHJpYnV0ZShcIm1heExlbmd0aFwiKSA6IChFdmVudFJ1bGVyLm9uKGVsLCBcImtleWRvd25cIiwgRXZlbnRIYW5kbGVycy5rZXlkb3duRXZlbnQpLCBcbiAgICAgICAgICAgICAgICAgICAgRXZlbnRSdWxlci5vbihlbCwgXCJrZXlwcmVzc1wiLCBFdmVudEhhbmRsZXJzLmtleXByZXNzRXZlbnQpKSwgRXZlbnRSdWxlci5vbihlbCwgXCJpbnB1dFwiLCBFdmVudEhhbmRsZXJzLmlucHV0RmFsbEJhY2tFdmVudCksIFxuICAgICAgICAgICAgICAgICAgICBFdmVudFJ1bGVyLm9uKGVsLCBcImNvbXBvc2l0aW9uZW5kXCIsIEV2ZW50SGFuZGxlcnMuY29tcG9zaXRpb25lbmRFdmVudCkpLCBFdmVudFJ1bGVyLm9uKGVsLCBcInNldHZhbHVlXCIsIEV2ZW50SGFuZGxlcnMuc2V0VmFsdWVFdmVudCksIFxuICAgICAgICAgICAgICAgICAgICB1bmRvVmFsdWUgPSBnZXRCdWZmZXJUZW1wbGF0ZSgpLmpvaW4oXCJcIik7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhY3RpdmVFbGVtZW50ID0gKGVsLmlucHV0bWFzay5zaGFkb3dSb290IHx8IGRvY3VtZW50KS5hY3RpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoXCJcIiAhPT0gZWwuaW5wdXRtYXNrLl92YWx1ZUdldCghMCkgfHwgITEgPT09IG9wdHMuY2xlYXJNYXNrT25Mb3N0Rm9jdXMgfHwgYWN0aXZlRWxlbWVudCA9PT0gZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGx5SW5wdXRWYWx1ZShlbCwgZWwuaW5wdXRtYXNrLl92YWx1ZUdldCghMCksIG9wdHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGdldEJ1ZmZlcigpLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAhMSA9PT0gaXNDb21wbGV0ZShidWZmZXIpICYmIG9wdHMuY2xlYXJJbmNvbXBsZXRlICYmIHJlc2V0TWFza1NldCgpLCBvcHRzLmNsZWFyTWFza09uTG9zdEZvY3VzICYmIGFjdGl2ZUVsZW1lbnQgIT09IGVsICYmICgtMSA9PT0gZ2V0TGFzdFZhbGlkUG9zaXRpb24oKSA/IGJ1ZmZlciA9IFtdIDogY2xlYXJPcHRpb25hbFRhaWwoYnVmZmVyKSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgKCExID09PSBvcHRzLmNsZWFyTWFza09uTG9zdEZvY3VzIHx8IG9wdHMuc2hvd01hc2tPbkZvY3VzICYmIGFjdGl2ZUVsZW1lbnQgPT09IGVsIHx8IFwiXCIgIT09IGVsLmlucHV0bWFzay5fdmFsdWVHZXQoITApKSAmJiB3cml0ZUJ1ZmZlcihlbCwgYnVmZmVyKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVFbGVtZW50ID09PSBlbCAmJiBjYXJldChlbCwgc2Vla05leHQoZ2V0TGFzdFZhbGlkUG9zaXRpb24oKSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gYWN0aW9uT2JqKSBzd2l0Y2ggKGFjdGlvbk9iai5hY3Rpb24pIHtcbiAgICAgICAgICAgICAgY2FzZSBcImlzQ29tcGxldGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZWwgPSBhY3Rpb25PYmouZWwsIGlzQ29tcGxldGUoZ2V0QnVmZmVyKCkpO1xuXG4gICAgICAgICAgICAgIGNhc2UgXCJ1bm1hc2tlZHZhbHVlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgMCAhPT0gZWwgJiYgdm9pZCAwID09PSBhY3Rpb25PYmoudmFsdWUgfHwgKHZhbHVlQnVmZmVyID0gYWN0aW9uT2JqLnZhbHVlLCBcbiAgICAgICAgICAgICAgICB2YWx1ZUJ1ZmZlciA9ICgkLmlzRnVuY3Rpb24ob3B0cy5vbkJlZm9yZU1hc2spICYmIG9wdHMub25CZWZvcmVNYXNrLmNhbGwoaW5wdXRtYXNrLCB2YWx1ZUJ1ZmZlciwgb3B0cykgfHwgdmFsdWVCdWZmZXIpLnNwbGl0KFwiXCIpLCBcbiAgICAgICAgICAgICAgICBjaGVja1ZhbC5jYWxsKHRoaXMsIHZvaWQgMCwgITEsICExLCB2YWx1ZUJ1ZmZlciksICQuaXNGdW5jdGlvbihvcHRzLm9uQmVmb3JlV3JpdGUpICYmIG9wdHMub25CZWZvcmVXcml0ZS5jYWxsKGlucHV0bWFzaywgdm9pZCAwLCBnZXRCdWZmZXIoKSwgMCwgb3B0cykpLCBcbiAgICAgICAgICAgICAgICB1bm1hc2tlZHZhbHVlKGVsKTtcblxuICAgICAgICAgICAgICBjYXNlIFwibWFza1wiOlxuICAgICAgICAgICAgICAgIG1hc2soZWwpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgXCJmb3JtYXRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVCdWZmZXIgPSAoJC5pc0Z1bmN0aW9uKG9wdHMub25CZWZvcmVNYXNrKSAmJiBvcHRzLm9uQmVmb3JlTWFzay5jYWxsKGlucHV0bWFzaywgYWN0aW9uT2JqLnZhbHVlLCBvcHRzKSB8fCBhY3Rpb25PYmoudmFsdWUpLnNwbGl0KFwiXCIpLCBcbiAgICAgICAgICAgICAgICBjaGVja1ZhbC5jYWxsKHRoaXMsIHZvaWQgMCwgITAsICExLCB2YWx1ZUJ1ZmZlciksIGFjdGlvbk9iai5tZXRhZGF0YSA/IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGlzUlRMID8gZ2V0QnVmZmVyKCkuc2xpY2UoKS5yZXZlcnNlKCkuam9pbihcIlwiKSA6IGdldEJ1ZmZlcigpLmpvaW4oXCJcIiksXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBtYXNrU2NvcGUuY2FsbCh0aGlzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IFwiZ2V0bWV0YWRhdGFcIlxuICAgICAgICAgICAgICAgICAgICB9LCBtYXNrc2V0LCBvcHRzKVxuICAgICAgICAgICAgICAgIH0gOiBpc1JUTCA/IGdldEJ1ZmZlcigpLnNsaWNlKCkucmV2ZXJzZSgpLmpvaW4oXCJcIikgOiBnZXRCdWZmZXIoKS5qb2luKFwiXCIpO1xuXG4gICAgICAgICAgICAgIGNhc2UgXCJpc1ZhbGlkXCI6XG4gICAgICAgICAgICAgICAgYWN0aW9uT2JqLnZhbHVlID8gKHZhbHVlQnVmZmVyID0gKCQuaXNGdW5jdGlvbihvcHRzLm9uQmVmb3JlTWFzaykgJiYgb3B0cy5vbkJlZm9yZU1hc2suY2FsbChpbnB1dG1hc2ssIGFjdGlvbk9iai52YWx1ZSwgb3B0cykgfHwgYWN0aW9uT2JqLnZhbHVlKS5zcGxpdChcIlwiKSwgXG4gICAgICAgICAgICAgICAgY2hlY2tWYWwuY2FsbCh0aGlzLCB2b2lkIDAsICEwLCAhMSwgdmFsdWVCdWZmZXIpKSA6IGFjdGlvbk9iai52YWx1ZSA9IGlzUlRMID8gZ2V0QnVmZmVyKCkuc2xpY2UoKS5yZXZlcnNlKCkuam9pbihcIlwiKSA6IGdldEJ1ZmZlcigpLmpvaW4oXCJcIik7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYnVmZmVyID0gZ2V0QnVmZmVyKCksIHJsID0gZGV0ZXJtaW5lTGFzdFJlcXVpcmVkUG9zaXRpb24oKSwgbG1pYiA9IGJ1ZmZlci5sZW5ndGggLSAxOyBybCA8IGxtaWIgJiYgIWlzTWFzayhsbWliKTsgbG1pYi0tKSA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlci5zcGxpY2UocmwsIGxtaWIgKyAxIC0gcmwpLCBpc0NvbXBsZXRlKGJ1ZmZlcikgJiYgYWN0aW9uT2JqLnZhbHVlID09PSAoaXNSVEwgPyBnZXRCdWZmZXIoKS5zbGljZSgpLnJldmVyc2UoKS5qb2luKFwiXCIpIDogZ2V0QnVmZmVyKCkuam9pbihcIlwiKSk7XG5cbiAgICAgICAgICAgICAgY2FzZSBcImdldGVtcHR5bWFza1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRCdWZmZXJUZW1wbGF0ZSgpLmpvaW4oXCJcIik7XG5cbiAgICAgICAgICAgICAgY2FzZSBcInJlbW92ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChlbCAmJiBlbC5pbnB1dG1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgJC5kYXRhKGVsLCBcIl9pbnB1dG1hc2tfb3B0c1wiLCBudWxsKSwgJGVsID0gJChlbCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjdiA9IG9wdHMuYXV0b1VubWFzayA/IHVubWFza2VkdmFsdWUoZWwpIDogZWwuaW5wdXRtYXNrLl92YWx1ZUdldChvcHRzLmF1dG9Vbm1hc2spLCB2YWx1ZVByb3BlcnR5O1xuICAgICAgICAgICAgICAgICAgICBjdiAhPT0gZ2V0QnVmZmVyVGVtcGxhdGUoKS5qb2luKFwiXCIpID8gZWwuaW5wdXRtYXNrLl92YWx1ZVNldChjdiwgb3B0cy5hdXRvVW5tYXNrKSA6IGVsLmlucHV0bWFzay5fdmFsdWVTZXQoXCJcIiksIFxuICAgICAgICAgICAgICAgICAgICBFdmVudFJ1bGVyLm9mZihlbCksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mID8gKHZhbHVlUHJvcGVydHkgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5nZXRQcm90b3R5cGVPZihlbCksIFwidmFsdWVcIiksIFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVByb3BlcnR5ICYmIGVsLmlucHV0bWFzay5fX3ZhbHVlR2V0ICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbCwgXCJ2YWx1ZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGVsLmlucHV0bWFzay5fX3ZhbHVlR2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBlbC5pbnB1dG1hc2suX192YWx1ZVNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICAgICAgICAgICAgICAgICAgfSkpIDogZG9jdW1lbnQuX19sb29rdXBHZXR0ZXJfXyAmJiBlbC5fX2xvb2t1cEdldHRlcl9fKFwidmFsdWVcIikgJiYgZWwuaW5wdXRtYXNrLl9fdmFsdWVHZXQgJiYgKGVsLl9fZGVmaW5lR2V0dGVyX18oXCJ2YWx1ZVwiLCBlbC5pbnB1dG1hc2suX192YWx1ZUdldCksIFxuICAgICAgICAgICAgICAgICAgICBlbC5fX2RlZmluZVNldHRlcl9fKFwidmFsdWVcIiwgZWwuaW5wdXRtYXNrLl9fdmFsdWVTZXQpKSwgZWwuaW5wdXRtYXNrID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZWw7XG5cbiAgICAgICAgICAgICAgY2FzZSBcImdldG1ldGFkYXRhXCI6XG4gICAgICAgICAgICAgICAgaWYgKCQuaXNBcnJheShtYXNrc2V0Lm1ldGFkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWFza1RhcmdldCA9IGdldE1hc2tUZW1wbGF0ZSghMCwgMCwgITEpLmpvaW4oXCJcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLmVhY2gobWFza3NldC5tZXRhZGF0YSwgZnVuY3Rpb24obmR4LCBtdGR0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobXRkdC5tYXNrID09PSBtYXNrVGFyZ2V0KSByZXR1cm4gbWFza1RhcmdldCA9IG10ZHQsICExO1xuICAgICAgICAgICAgICAgICAgICB9KSwgbWFza1RhcmdldDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hc2tzZXQubWV0YWRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgICAgICAgICAgfSA6IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICAgICAgICAgIH0sIF90eXBlb2Yob2JqKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgSW5wdXRtYXNrID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKSwgJCA9IElucHV0bWFzay5kZXBlbmRlbmN5TGliLCBrZXlDb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKSwgZm9ybWF0Q29kZSA9IHtcbiAgICAgICAgICAgIGQ6IFsgXCJbMS05XXxbMTJdWzAtOV18M1swMV1cIiwgRGF0ZS5wcm90b3R5cGUuc2V0RGF0ZSwgXCJkYXlcIiwgRGF0ZS5wcm90b3R5cGUuZ2V0RGF0ZSBdLFxuICAgICAgICAgICAgZGQ6IFsgXCIwWzEtOV18WzEyXVswLTldfDNbMDFdXCIsIERhdGUucHJvdG90eXBlLnNldERhdGUsIFwiZGF5XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYWQoRGF0ZS5wcm90b3R5cGUuZ2V0RGF0ZS5jYWxsKHRoaXMpLCAyKTtcbiAgICAgICAgICAgIH0gXSxcbiAgICAgICAgICAgIGRkZDogWyBcIlwiIF0sXG4gICAgICAgICAgICBkZGRkOiBbIFwiXCIgXSxcbiAgICAgICAgICAgIG06IFsgXCJbMS05XXwxWzAxMl1cIiwgRGF0ZS5wcm90b3R5cGUuc2V0TW9udGgsIFwibW9udGhcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIERhdGUucHJvdG90eXBlLmdldE1vbnRoLmNhbGwodGhpcykgKyAxO1xuICAgICAgICAgICAgfSBdLFxuICAgICAgICAgICAgbW06IFsgXCIwWzEtOV18MVswMTJdXCIsIERhdGUucHJvdG90eXBlLnNldE1vbnRoLCBcIm1vbnRoXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYWQoRGF0ZS5wcm90b3R5cGUuZ2V0TW9udGguY2FsbCh0aGlzKSArIDEsIDIpO1xuICAgICAgICAgICAgfSBdLFxuICAgICAgICAgICAgbW1tOiBbIFwiXCIgXSxcbiAgICAgICAgICAgIG1tbW06IFsgXCJcIiBdLFxuICAgICAgICAgICAgeXk6IFsgXCJbMC05XXsyfVwiLCBEYXRlLnByb3RvdHlwZS5zZXRGdWxsWWVhciwgXCJ5ZWFyXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYWQoRGF0ZS5wcm90b3R5cGUuZ2V0RnVsbFllYXIuY2FsbCh0aGlzKSwgMik7XG4gICAgICAgICAgICB9IF0sXG4gICAgICAgICAgICB5eXl5OiBbIFwiWzAtOV17NH1cIiwgRGF0ZS5wcm90b3R5cGUuc2V0RnVsbFllYXIsIFwieWVhclwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFkKERhdGUucHJvdG90eXBlLmdldEZ1bGxZZWFyLmNhbGwodGhpcyksIDQpO1xuICAgICAgICAgICAgfSBdLFxuICAgICAgICAgICAgaDogWyBcIlsxLTldfDFbMC0yXVwiLCBEYXRlLnByb3RvdHlwZS5zZXRIb3VycywgXCJob3Vyc1wiLCBEYXRlLnByb3RvdHlwZS5nZXRIb3VycyBdLFxuICAgICAgICAgICAgaGg6IFsgXCIwWzEtOV18MVswLTJdXCIsIERhdGUucHJvdG90eXBlLnNldEhvdXJzLCBcImhvdXJzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYWQoRGF0ZS5wcm90b3R5cGUuZ2V0SG91cnMuY2FsbCh0aGlzKSwgMik7XG4gICAgICAgICAgICB9IF0sXG4gICAgICAgICAgICBoeDogWyBmdW5jdGlvbih4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiWzAtOV17XCIuY29uY2F0KHgsIFwifVwiKTtcbiAgICAgICAgICAgIH0sIERhdGUucHJvdG90eXBlLnNldEhvdXJzLCBcImhvdXJzXCIsIGZ1bmN0aW9uKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRGF0ZS5wcm90b3R5cGUuZ2V0SG91cnM7XG4gICAgICAgICAgICB9IF0sXG4gICAgICAgICAgICBIOiBbIFwiMT9bMC05XXwyWzAtM11cIiwgRGF0ZS5wcm90b3R5cGUuc2V0SG91cnMsIFwiaG91cnNcIiwgRGF0ZS5wcm90b3R5cGUuZ2V0SG91cnMgXSxcbiAgICAgICAgICAgIEhIOiBbIFwiMFswLTldfDFbMC05XXwyWzAtM11cIiwgRGF0ZS5wcm90b3R5cGUuc2V0SG91cnMsIFwiaG91cnNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhZChEYXRlLnByb3RvdHlwZS5nZXRIb3Vycy5jYWxsKHRoaXMpLCAyKTtcbiAgICAgICAgICAgIH0gXSxcbiAgICAgICAgICAgIEh4OiBbIGZ1bmN0aW9uKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJbMC05XXtcIi5jb25jYXQoeCwgXCJ9XCIpO1xuICAgICAgICAgICAgfSwgRGF0ZS5wcm90b3R5cGUuc2V0SG91cnMsIFwiaG91cnNcIiwgZnVuY3Rpb24oeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhZChEYXRlLnByb3RvdHlwZS5nZXRIb3Vycy5jYWxsKHRoaXMpLCB4KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBdLFxuICAgICAgICAgICAgTTogWyBcIlsxLTVdP1swLTldXCIsIERhdGUucHJvdG90eXBlLnNldE1pbnV0ZXMsIFwibWludXRlc1wiLCBEYXRlLnByb3RvdHlwZS5nZXRNaW51dGVzIF0sXG4gICAgICAgICAgICBNTTogWyBcIjBbMC05XXwxWzAtOV18MlswLTldfDNbMC05XXw0WzAtOV18NVswLTldXCIsIERhdGUucHJvdG90eXBlLnNldE1pbnV0ZXMsIFwibWludXRlc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFkKERhdGUucHJvdG90eXBlLmdldE1pbnV0ZXMuY2FsbCh0aGlzKSwgMik7XG4gICAgICAgICAgICB9IF0sXG4gICAgICAgICAgICBzOiBbIFwiWzEtNV0/WzAtOV1cIiwgRGF0ZS5wcm90b3R5cGUuc2V0U2Vjb25kcywgXCJzZWNvbmRzXCIsIERhdGUucHJvdG90eXBlLmdldFNlY29uZHMgXSxcbiAgICAgICAgICAgIHNzOiBbIFwiMFswLTldfDFbMC05XXwyWzAtOV18M1swLTldfDRbMC05XXw1WzAtOV1cIiwgRGF0ZS5wcm90b3R5cGUuc2V0U2Vjb25kcywgXCJzZWNvbmRzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYWQoRGF0ZS5wcm90b3R5cGUuZ2V0U2Vjb25kcy5jYWxsKHRoaXMpLCAyKTtcbiAgICAgICAgICAgIH0gXSxcbiAgICAgICAgICAgIGw6IFsgXCJbMC05XXszfVwiLCBEYXRlLnByb3RvdHlwZS5zZXRNaWxsaXNlY29uZHMsIFwibWlsbGlzZWNvbmRzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYWQoRGF0ZS5wcm90b3R5cGUuZ2V0TWlsbGlzZWNvbmRzLmNhbGwodGhpcyksIDMpO1xuICAgICAgICAgICAgfSBdLFxuICAgICAgICAgICAgTDogWyBcIlswLTldezJ9XCIsIERhdGUucHJvdG90eXBlLnNldE1pbGxpc2Vjb25kcywgXCJtaWxsaXNlY29uZHNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhZChEYXRlLnByb3RvdHlwZS5nZXRNaWxsaXNlY29uZHMuY2FsbCh0aGlzKSwgMik7XG4gICAgICAgICAgICB9IF0sXG4gICAgICAgICAgICB0OiBbIFwiW2FwXVwiIF0sXG4gICAgICAgICAgICB0dDogWyBcIlthcF1tXCIgXSxcbiAgICAgICAgICAgIFQ6IFsgXCJbQVBdXCIgXSxcbiAgICAgICAgICAgIFRUOiBbIFwiW0FQXU1cIiBdLFxuICAgICAgICAgICAgWjogWyBcIlwiIF0sXG4gICAgICAgICAgICBvOiBbIFwiXCIgXSxcbiAgICAgICAgICAgIFM6IFsgXCJcIiBdXG4gICAgICAgIH0sIGZvcm1hdEFsaWFzID0ge1xuICAgICAgICAgICAgaXNvRGF0ZTogXCJ5eXl5LW1tLWRkXCIsXG4gICAgICAgICAgICBpc29UaW1lOiBcIkhIOk1NOnNzXCIsXG4gICAgICAgICAgICBpc29EYXRlVGltZTogXCJ5eXl5LW1tLWRkJ1QnSEg6TU06c3NcIixcbiAgICAgICAgICAgIGlzb1V0Y0RhdGVUaW1lOiBcIlVUQzp5eXl5LW1tLWRkJ1QnSEg6TU06c3MnWidcIlxuICAgICAgICB9O1xuICAgICAgICBmdW5jdGlvbiBmb3JtYXRjb2RlKG1hdGNoKSB7XG4gICAgICAgICAgICB2YXIgZHluTWF0Y2hlcyA9IG5ldyBSZWdFeHAoXCJcXFxcZCskXCIpLmV4ZWMobWF0Y2hbMF0pO1xuICAgICAgICAgICAgaWYgKGR5bk1hdGNoZXMgJiYgdm9pZCAwICE9PSBkeW5NYXRjaGVzWzBdKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZjb2RlID0gZm9ybWF0Q29kZVttYXRjaFswXVswXSArIFwieFwiXS5zbGljZShcIlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmNvZGVbMF0gPSBmY29kZVswXShkeW5NYXRjaGVzWzBdKSwgZmNvZGVbM10gPSBmY29kZVszXShkeW5NYXRjaGVzWzBdKSwgZmNvZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9ybWF0Q29kZVttYXRjaFswXV0pIHJldHVybiBmb3JtYXRDb2RlW21hdGNoWzBdXTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnZXRUb2tlbml6ZXIob3B0cykge1xuICAgICAgICAgICAgaWYgKCFvcHRzLnRva2VuaXplcikge1xuICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBbXSwgZHludG9rZW5zID0gW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbmR4IGluIGZvcm1hdENvZGUpIGlmICgvXFwuKngkLy50ZXN0KG5keCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGR5blRva2VuID0gbmR4WzBdICsgXCJcXFxcZCtcIjtcbiAgICAgICAgICAgICAgICAgICAgLTEgPT09IGR5bnRva2Vucy5pbmRleE9mKGR5blRva2VuKSAmJiBkeW50b2tlbnMucHVzaChkeW5Ub2tlbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIC0xID09PSB0b2tlbnMuaW5kZXhPZihuZHhbMF0pICYmIHRva2Vucy5wdXNoKG5keFswXSk7XG4gICAgICAgICAgICAgICAgb3B0cy50b2tlbml6ZXIgPSBcIihcIiArICgwIDwgZHludG9rZW5zLmxlbmd0aCA/IGR5bnRva2Vucy5qb2luKFwifFwiKSArIFwifFwiIDogXCJcIikgKyB0b2tlbnMuam9pbihcIit8XCIpICsgXCIpKz98LlwiLCBcbiAgICAgICAgICAgICAgICBvcHRzLnRva2VuaXplciA9IG5ldyBSZWdFeHAob3B0cy50b2tlbml6ZXIsIFwiZ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvcHRzLnRva2VuaXplcjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc1ZhbGlkRGF0ZShkYXRlUGFydHMsIGN1cnJlbnRSZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiAoIWlzRmluaXRlKGRhdGVQYXJ0cy5yYXdkYXkpIHx8IFwiMjlcIiA9PSBkYXRlUGFydHMuZGF5ICYmICFpc0Zpbml0ZShkYXRlUGFydHMucmF3eWVhcikgfHwgbmV3IERhdGUoZGF0ZVBhcnRzLmRhdGUuZ2V0RnVsbFllYXIoKSwgaXNGaW5pdGUoZGF0ZVBhcnRzLnJhd21vbnRoKSA/IGRhdGVQYXJ0cy5tb250aCA6IGRhdGVQYXJ0cy5kYXRlLmdldE1vbnRoKCkgKyAxLCAwKS5nZXREYXRlKCkgPj0gZGF0ZVBhcnRzLmRheSkgJiYgY3VycmVudFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc0RhdGVJblJhbmdlKGRhdGVQYXJ0cywgb3B0cykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICEwO1xuICAgICAgICAgICAgaWYgKG9wdHMubWluKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGVQYXJ0cy5yYXd5ZWFyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByYXdZZWFyID0gZGF0ZVBhcnRzLnJhd3llYXIucmVwbGFjZSgvW14wLTldL2csIFwiXCIpLCBtaW5ZZWFyID0gb3B0cy5taW4ueWVhci5zdWJzdHIoMCwgcmF3WWVhci5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtaW5ZZWFyIDw9IHJhd1llYXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGVQYXJ0cy55ZWFyID09PSBkYXRlUGFydHMucmF3eWVhciAmJiBvcHRzLm1pbi5kYXRlLmdldFRpbWUoKSA9PSBvcHRzLm1pbi5kYXRlLmdldFRpbWUoKSAmJiAocmVzdWx0ID0gb3B0cy5taW4uZGF0ZS5nZXRUaW1lKCkgPD0gZGF0ZVBhcnRzLmRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgJiYgb3B0cy5tYXggJiYgb3B0cy5tYXguZGF0ZS5nZXRUaW1lKCkgPT0gb3B0cy5tYXguZGF0ZS5nZXRUaW1lKCkgJiYgKHJlc3VsdCA9IG9wdHMubWF4LmRhdGUuZ2V0VGltZSgpID49IGRhdGVQYXJ0cy5kYXRlLmdldFRpbWUoKSksIFxuICAgICAgICAgICAgcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlKGZvcm1hdCwgZGF0ZU9ialZhbHVlLCBvcHRzLCByYXcpIHtcbiAgICAgICAgICAgIHZhciBtYXNrID0gXCJcIiwgbWF0Y2gsIGZjb2RlO1xuICAgICAgICAgICAgZm9yIChnZXRUb2tlbml6ZXIob3B0cykubGFzdEluZGV4ID0gMDsgbWF0Y2ggPSBnZXRUb2tlbml6ZXIob3B0cykuZXhlYyhmb3JtYXQpOyApIGlmICh2b2lkIDAgPT09IGRhdGVPYmpWYWx1ZSkgaWYgKGZjb2RlID0gZm9ybWF0Y29kZShtYXRjaCkpIG1hc2sgKz0gXCIoXCIgKyBmY29kZVswXSArIFwiKVwiOyBlbHNlIHN3aXRjaCAobWF0Y2hbMF0pIHtcbiAgICAgICAgICAgICAgY2FzZSBcIltcIjpcbiAgICAgICAgICAgICAgICBtYXNrICs9IFwiKFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgXCJdXCI6XG4gICAgICAgICAgICAgICAgbWFzayArPSBcIik/XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBtYXNrICs9IElucHV0bWFzay5lc2NhcGVSZWdleChtYXRjaFswXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZjb2RlID0gZm9ybWF0Y29kZShtYXRjaCkpIGlmICghMCAhPT0gcmF3ICYmIGZjb2RlWzNdKSB7XG4gICAgICAgICAgICAgICAgdmFyIGdldEZuID0gZmNvZGVbM107XG4gICAgICAgICAgICAgICAgbWFzayArPSBnZXRGbi5jYWxsKGRhdGVPYmpWYWx1ZS5kYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBmY29kZVsyXSA/IG1hc2sgKz0gZGF0ZU9ialZhbHVlW1wicmF3XCIgKyBmY29kZVsyXV0gOiBtYXNrICs9IG1hdGNoWzBdOyBlbHNlIG1hc2sgKz0gbWF0Y2hbMF07XG4gICAgICAgICAgICByZXR1cm4gbWFzaztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBwYWQodmFsLCBsZW4pIHtcbiAgICAgICAgICAgIGZvciAodmFsID0gU3RyaW5nKHZhbCksIGxlbiA9IGxlbiB8fCAyOyB2YWwubGVuZ3RoIDwgbGVuOyApIHZhbCA9IFwiMFwiICsgdmFsO1xuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhbmFseXNlTWFzayhtYXNrU3RyaW5nLCBmb3JtYXQsIG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBkYXRlT2JqID0ge1xuICAgICAgICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKDEsIDAsIDEpXG4gICAgICAgICAgICB9LCB0YXJnZXRQcm9wLCBtYXNrID0gbWFza1N0cmluZywgbWF0Y2gsIGRhdGVPcGVyYXRpb247XG4gICAgICAgICAgICBmdW5jdGlvbiBleHRlbmRQcm9wZXJ0eSh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBjb3JyZWN0ZWRWYWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1teMC05XS9nLCBcIjBcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvcnJlY3RlZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gc2V0VmFsdWUoZGF0ZU9iaiwgdmFsdWUsIG9wdHMpIHtcbiAgICAgICAgICAgICAgICBkYXRlT2JqW3RhcmdldFByb3BdID0gZXh0ZW5kUHJvcGVydHkodmFsdWUpLCBkYXRlT2JqW1wicmF3XCIgKyB0YXJnZXRQcm9wXSA9IHZhbHVlLCBcbiAgICAgICAgICAgICAgICB2b2lkIDAgIT09IGRhdGVPcGVyYXRpb24gJiYgZGF0ZU9wZXJhdGlvbi5jYWxsKGRhdGVPYmouZGF0ZSwgXCJtb250aFwiID09IHRhcmdldFByb3AgPyBwYXJzZUludChkYXRlT2JqW3RhcmdldFByb3BdKSAtIDEgOiBkYXRlT2JqW3RhcmdldFByb3BdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcInN0cmluZ1wiID09IHR5cGVvZiBtYXNrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChnZXRUb2tlbml6ZXIob3B0cykubGFzdEluZGV4ID0gMDsgbWF0Y2ggPSBnZXRUb2tlbml6ZXIob3B0cykuZXhlYyhmb3JtYXQpOyApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gbWFzay5zbGljZSgwLCBtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXRDb2RlLmhhc093blByb3BlcnR5KG1hdGNoWzBdKSAmJiAodGFyZ2V0UHJvcCA9IGZvcm1hdENvZGVbbWF0Y2hbMF1dWzJdLCBkYXRlT3BlcmF0aW9uID0gZm9ybWF0Q29kZVttYXRjaFswXV1bMV0sIFxuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZShkYXRlT2JqLCB2YWx1ZSwgb3B0cykpLCBtYXNrID0gbWFzay5zbGljZSh2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZU9iajtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXNrICYmIFwib2JqZWN0XCIgPT09IF90eXBlb2YobWFzaykgJiYgbWFzay5oYXNPd25Qcm9wZXJ0eShcImRhdGVcIikpIHJldHVybiBtYXNrO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGltcG9ydERhdGUoZGF0ZU9iaiwgb3B0cykge1xuICAgICAgICAgICAgdmFyIG1hdGNoLCBkYXRlID0gXCJcIjtcbiAgICAgICAgICAgIGZvciAoZ2V0VG9rZW5pemVyKG9wdHMpLmxhc3RJbmRleCA9IDA7IG1hdGNoID0gZ2V0VG9rZW5pemVyKG9wdHMpLmV4ZWMob3B0cy5pbnB1dEZvcm1hdCk7ICkgXCJkXCIgPT09IG1hdGNoWzBdLmNoYXJBdCgwKSA/IGRhdGUgKz0gcGFkKGRhdGVPYmouZ2V0RGF0ZSgpLCBtYXRjaFswXS5sZW5ndGgpIDogXCJtXCIgPT09IG1hdGNoWzBdLmNoYXJBdCgwKSA/IGRhdGUgKz0gcGFkKGRhdGVPYmouZ2V0TW9udGgoKSArIDEsIG1hdGNoWzBdLmxlbmd0aCkgOiBcInl5eXlcIiA9PT0gbWF0Y2hbMF0gPyBkYXRlICs9IGRhdGVPYmouZ2V0RnVsbFllYXIoKS50b1N0cmluZygpIDogXCJ5XCIgPT09IG1hdGNoWzBdLmNoYXJBdCgwKSAmJiAoZGF0ZSArPSBwYWQoZGF0ZU9iai5nZXRZZWFyKCksIG1hdGNoWzBdLmxlbmd0aCkpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2V0VG9rZW5NYXRjaChwb3MsIG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBjYWxjUG9zID0gMCwgdGFyZ2V0TWF0Y2gsIG1hdGNoLCBtYXRjaExlbmd0aCA9IDA7XG4gICAgICAgICAgICBmb3IgKGdldFRva2VuaXplcihvcHRzKS5sYXN0SW5kZXggPSAwOyBtYXRjaCA9IGdldFRva2VuaXplcihvcHRzKS5leGVjKG9wdHMuaW5wdXRGb3JtYXQpOyApIHtcbiAgICAgICAgICAgICAgICB2YXIgZHluTWF0Y2hlcyA9IG5ldyBSZWdFeHAoXCJcXFxcZCskXCIpLmV4ZWMobWF0Y2hbMF0pO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaExlbmd0aCA9IGR5bk1hdGNoZXMgPyBwYXJzZUludChkeW5NYXRjaGVzWzBdKSA6IG1hdGNoWzBdLmxlbmd0aCwgY2FsY1BvcyArPSBtYXRjaExlbmd0aCwgXG4gICAgICAgICAgICAgICAgcG9zIDw9IGNhbGNQb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TWF0Y2ggPSBtYXRjaCwgbWF0Y2ggPSBnZXRUb2tlbml6ZXIob3B0cykuZXhlYyhvcHRzLmlucHV0Rm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRNYXRjaEluZGV4OiBjYWxjUG9zIC0gbWF0Y2hMZW5ndGgsXG4gICAgICAgICAgICAgICAgbmV4dE1hdGNoOiBtYXRjaCxcbiAgICAgICAgICAgICAgICB0YXJnZXRNYXRjaDogdGFyZ2V0TWF0Y2hcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgSW5wdXRtYXNrLmV4dGVuZEFsaWFzZXMoe1xuICAgICAgICAgICAgZGF0ZXRpbWU6IHtcbiAgICAgICAgICAgICAgICBtYXNrOiBmdW5jdGlvbiBtYXNrKG9wdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdHMubnVtZXJpY0lucHV0ID0gITEsIGZvcm1hdENvZGUuUyA9IG9wdHMuaTE4bi5vcmRpbmFsU3VmZml4LmpvaW4oXCJ8XCIpLCBcbiAgICAgICAgICAgICAgICAgICAgb3B0cy5pbnB1dEZvcm1hdCA9IGZvcm1hdEFsaWFzW29wdHMuaW5wdXRGb3JtYXRdIHx8IG9wdHMuaW5wdXRGb3JtYXQsIG9wdHMuZGlzcGxheUZvcm1hdCA9IGZvcm1hdEFsaWFzW29wdHMuZGlzcGxheUZvcm1hdF0gfHwgb3B0cy5kaXNwbGF5Rm9ybWF0IHx8IG9wdHMuaW5wdXRGb3JtYXQsIFxuICAgICAgICAgICAgICAgICAgICBvcHRzLm91dHB1dEZvcm1hdCA9IGZvcm1hdEFsaWFzW29wdHMub3V0cHV0Rm9ybWF0XSB8fCBvcHRzLm91dHB1dEZvcm1hdCB8fCBvcHRzLmlucHV0Rm9ybWF0LCBcbiAgICAgICAgICAgICAgICAgICAgb3B0cy5wbGFjZWhvbGRlciA9IFwiXCIgIT09IG9wdHMucGxhY2Vob2xkZXIgPyBvcHRzLnBsYWNlaG9sZGVyIDogb3B0cy5pbnB1dEZvcm1hdC5yZXBsYWNlKC9bW1xcXV0vLCBcIlwiKSwgXG4gICAgICAgICAgICAgICAgICAgIG9wdHMucmVnZXggPSBwYXJzZShvcHRzLmlucHV0Rm9ybWF0LCB2b2lkIDAsIG9wdHMpLCBvcHRzLm1pbiA9IGFuYWx5c2VNYXNrKG9wdHMubWluLCBvcHRzLmlucHV0Rm9ybWF0LCBvcHRzKSwgXG4gICAgICAgICAgICAgICAgICAgIG9wdHMubWF4ID0gYW5hbHlzZU1hc2sob3B0cy5tYXgsIG9wdHMuaW5wdXRGb3JtYXQsIG9wdHMpLCBudWxsO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiXCIsXG4gICAgICAgICAgICAgICAgaW5wdXRGb3JtYXQ6IFwiaXNvRGF0ZVRpbWVcIixcbiAgICAgICAgICAgICAgICBkaXNwbGF5Rm9ybWF0OiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgb3V0cHV0Rm9ybWF0OiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgbWluOiBudWxsLFxuICAgICAgICAgICAgICAgIG1heDogbnVsbCxcbiAgICAgICAgICAgICAgICBza2lwT3B0aW9uYWxQYXJ0Q2hhcmFjdGVyOiBcIlwiLFxuICAgICAgICAgICAgICAgIGkxOG46IHtcbiAgICAgICAgICAgICAgICAgICAgZGF5TmFtZXM6IFsgXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIiwgXCJTdW5cIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIiwgXCJGcmlkYXlcIiwgXCJTYXR1cmRheVwiLCBcIlN1bmRheVwiIF0sXG4gICAgICAgICAgICAgICAgICAgIG1vbnRoTmFtZXM6IFsgXCJKYW5cIiwgXCJGZWJcIiwgXCJNYXJcIiwgXCJBcHJcIiwgXCJNYXlcIiwgXCJKdW5cIiwgXCJKdWxcIiwgXCJBdWdcIiwgXCJTZXBcIiwgXCJPY3RcIiwgXCJOb3ZcIiwgXCJEZWNcIiwgXCJKYW51YXJ5XCIsIFwiRmVicnVhcnlcIiwgXCJNYXJjaFwiLCBcIkFwcmlsXCIsIFwiTWF5XCIsIFwiSnVuZVwiLCBcIkp1bHlcIiwgXCJBdWd1c3RcIiwgXCJTZXB0ZW1iZXJcIiwgXCJPY3RvYmVyXCIsIFwiTm92ZW1iZXJcIiwgXCJEZWNlbWJlclwiIF0sXG4gICAgICAgICAgICAgICAgICAgIG9yZGluYWxTdWZmaXg6IFsgXCJzdFwiLCBcIm5kXCIsIFwicmRcIiwgXCJ0aFwiIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHByZVZhbGlkYXRpb246IGZ1bmN0aW9uIHByZVZhbGlkYXRpb24oYnVmZmVyLCBwb3MsIGMsIGlzU2VsZWN0aW9uLCBvcHRzLCBtYXNrc2V0LCBjYXJldFBvcywgc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJpY3QpIHJldHVybiAhMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKGMpICYmIGJ1ZmZlcltwb3NdICE9PSBjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW5NYXRjaCA9IGdldFRva2VuTWF0Y2gocG9zLCBvcHRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbk1hdGNoLm5leHRNYXRjaCAmJiB0b2tlbk1hdGNoLm5leHRNYXRjaFswXSA9PT0gYyAmJiAxIDwgdG9rZW5NYXRjaC50YXJnZXRNYXRjaFswXS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsaWRhdG9yID0gZm9ybWF0Q29kZVt0b2tlbk1hdGNoLnRhcmdldE1hdGNoWzBdXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3IFJlZ0V4cCh2YWxpZGF0b3IpLnRlc3QoXCIwXCIgKyBidWZmZXJbcG9zIC0gMV0pKSByZXR1cm4gYnVmZmVyW3Bvc10gPSBidWZmZXJbcG9zIC0gMV0sIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltwb3MgLSAxXSA9IFwiMFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1enp5OiAhMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyOiBidWZmZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hGcm9tQnVmZmVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogcG9zIC0gMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogcG9zICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3M6IHBvcyArIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBvc3RWYWxpZGF0aW9uOiBmdW5jdGlvbiBwb3N0VmFsaWRhdGlvbihidWZmZXIsIHBvcywgYywgY3VycmVudFJlc3VsdCwgb3B0cywgbWFza3NldCwgc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJpY3QpIHJldHVybiAhMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuTWF0Y2gsIHZhbGlkYXRvcjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCExID09PSBjdXJyZW50UmVzdWx0KSByZXR1cm4gdG9rZW5NYXRjaCA9IGdldFRva2VuTWF0Y2gocG9zICsgMSwgb3B0cyksIHRva2VuTWF0Y2gudGFyZ2V0TWF0Y2ggJiYgdG9rZW5NYXRjaC50YXJnZXRNYXRjaEluZGV4ID09PSBwb3MgJiYgMSA8IHRva2VuTWF0Y2gudGFyZ2V0TWF0Y2hbMF0ubGVuZ3RoICYmIHZvaWQgMCAhPT0gZm9ybWF0Q29kZVt0b2tlbk1hdGNoLnRhcmdldE1hdGNoWzBdXSAmJiAodmFsaWRhdG9yID0gZm9ybWF0Q29kZVt0b2tlbk1hdGNoLnRhcmdldE1hdGNoWzBdXVswXSwgXG4gICAgICAgICAgICAgICAgICAgIG5ldyBSZWdFeHAodmFsaWRhdG9yKS50ZXN0KFwiMFwiICsgYykpID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0OiBbIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3M6IHBvcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBcIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvczogcG9zICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBjXG4gICAgICAgICAgICAgICAgICAgICAgICB9IF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3M6IHBvcyArIDFcbiAgICAgICAgICAgICAgICAgICAgfSA6IGN1cnJlbnRSZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UmVzdWx0LmZ1enp5ICYmIChidWZmZXIgPSBjdXJyZW50UmVzdWx0LmJ1ZmZlciwgcG9zID0gY3VycmVudFJlc3VsdC5wb3MpLCBcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5NYXRjaCA9IGdldFRva2VuTWF0Y2gocG9zLCBvcHRzKSwgdG9rZW5NYXRjaC50YXJnZXRNYXRjaCAmJiB0b2tlbk1hdGNoLnRhcmdldE1hdGNoWzBdICYmIHZvaWQgMCAhPT0gZm9ybWF0Q29kZVt0b2tlbk1hdGNoLnRhcmdldE1hdGNoWzBdXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yID0gZm9ybWF0Q29kZVt0b2tlbk1hdGNoLnRhcmdldE1hdGNoWzBdXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJ0ID0gYnVmZmVyLnNsaWNlKHRva2VuTWF0Y2gudGFyZ2V0TWF0Y2hJbmRleCwgdG9rZW5NYXRjaC50YXJnZXRNYXRjaEluZGV4ICsgdG9rZW5NYXRjaC50YXJnZXRNYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgITEgPT09IG5ldyBSZWdFeHAodmFsaWRhdG9yKS50ZXN0KHBhcnQuam9pbihcIlwiKSkgJiYgMiA9PT0gdG9rZW5NYXRjaC50YXJnZXRNYXRjaFswXS5sZW5ndGggJiYgbWFza3NldC52YWxpZFBvc2l0aW9uc1t0b2tlbk1hdGNoLnRhcmdldE1hdGNoSW5kZXhdICYmIG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbdG9rZW5NYXRjaC50YXJnZXRNYXRjaEluZGV4ICsgMV0gJiYgKG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbdG9rZW5NYXRjaC50YXJnZXRNYXRjaEluZGV4ICsgMV0uaW5wdXQgPSBcIjBcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGN1cnJlbnRSZXN1bHQsIGRhdGVQYXJ0cyA9IGFuYWx5c2VNYXNrKGJ1ZmZlci5qb2luKFwiXCIpLCBvcHRzLmlucHV0Rm9ybWF0LCBvcHRzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiBkYXRlUGFydHMuZGF0ZS5nZXRUaW1lKCkgPT0gZGF0ZVBhcnRzLmRhdGUuZ2V0VGltZSgpICYmIChyZXN1bHQgPSBpc1ZhbGlkRGF0ZShkYXRlUGFydHMsIHJlc3VsdCksIFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgaXNEYXRlSW5SYW5nZShkYXRlUGFydHMsIG9wdHMpKSwgcG9zICYmIHJlc3VsdCAmJiBjdXJyZW50UmVzdWx0LnBvcyAhPT0gcG9zID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyOiBwYXJzZShvcHRzLmlucHV0Rm9ybWF0LCBkYXRlUGFydHMsIG9wdHMpLnNwbGl0KFwiXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaEZyb21CdWZmZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogcG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogY3VycmVudFJlc3VsdC5wb3NcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSA6IHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uS2V5RG93bjogZnVuY3Rpb24gb25LZXlEb3duKGUsIGJ1ZmZlciwgY2FyZXRQb3MsIG9wdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgZS5jdHJsS2V5ICYmIGUua2V5Q29kZSA9PT0ga2V5Q29kZS5SSUdIVCAmJiAodGhpcy5pbnB1dG1hc2suX3ZhbHVlU2V0KGltcG9ydERhdGUobmV3IERhdGUoKSwgb3B0cykpLCBcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS50cmlnZ2VyKFwic2V0dmFsdWVcIikpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25Vbk1hc2s6IGZ1bmN0aW9uIG9uVW5NYXNrKG1hc2tlZFZhbHVlLCB1bm1hc2tlZFZhbHVlLCBvcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bm1hc2tlZFZhbHVlID8gcGFyc2Uob3B0cy5vdXRwdXRGb3JtYXQsIGFuYWx5c2VNYXNrKG1hc2tlZFZhbHVlLCBvcHRzLmlucHV0Rm9ybWF0LCBvcHRzKSwgb3B0cywgITApIDogdW5tYXNrZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhc2luZzogZnVuY3Rpb24gY2FzaW5nKGVsZW0sIHRlc3QsIHBvcywgdmFsaWRQb3NpdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAgPT0gdGVzdC5uYXRpdmVEZWYuaW5kZXhPZihcIlthcF1cIikgPyBlbGVtLnRvTG93ZXJDYXNlKCkgOiAwID09IHRlc3QubmF0aXZlRGVmLmluZGV4T2YoXCJbQVBdXCIpID8gZWxlbS50b1VwcGVyQ2FzZSgpIDogZWxlbTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uQmVmb3JlTWFzazogZnVuY3Rpb24gb25CZWZvcmVNYXNrKGluaXRpYWxWYWx1ZSwgb3B0cykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJbb2JqZWN0IERhdGVdXCIgPT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbml0aWFsVmFsdWUpICYmIChpbml0aWFsVmFsdWUgPSBpbXBvcnREYXRlKGluaXRpYWxWYWx1ZSwgb3B0cykpLCBcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaW5zZXJ0TW9kZTogITEsXG4gICAgICAgICAgICAgICAgc2hpZnRQb3NpdGlvbnM6ICExLFxuICAgICAgICAgICAgICAgIGtlZXBTdGF0aWM6ICExLFxuICAgICAgICAgICAgICAgIGlucHV0bW9kZTogXCJudW1lcmljXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksIG1vZHVsZS5leHBvcnRzID0gSW5wdXRtYXNrO1xuICAgIH0sIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgdmFyIElucHV0bWFzayA9IF9fd2VicGFja19yZXF1aXJlX18oMSksICQgPSBJbnB1dG1hc2suZGVwZW5kZW5jeUxpYiwga2V5Q29kZSA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4gICAgICAgIGZ1bmN0aW9uIGF1dG9Fc2NhcGUodHh0LCBvcHRzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBlc2NhcGVkVHh0ID0gXCJcIiwgaSA9IDA7IGkgPCB0eHQubGVuZ3RoOyBpKyspIElucHV0bWFzay5wcm90b3R5cGUuZGVmaW5pdGlvbnNbdHh0LmNoYXJBdChpKV0gfHwgb3B0cy5kZWZpbml0aW9uc1t0eHQuY2hhckF0KGkpXSB8fCBvcHRzLm9wdGlvbmFsbWFya2VyWzBdID09PSB0eHQuY2hhckF0KGkpIHx8IG9wdHMub3B0aW9uYWxtYXJrZXJbMV0gPT09IHR4dC5jaGFyQXQoaSkgfHwgb3B0cy5xdWFudGlmaWVybWFya2VyWzBdID09PSB0eHQuY2hhckF0KGkpIHx8IG9wdHMucXVhbnRpZmllcm1hcmtlclsxXSA9PT0gdHh0LmNoYXJBdChpKSB8fCBvcHRzLmdyb3VwbWFya2VyWzBdID09PSB0eHQuY2hhckF0KGkpIHx8IG9wdHMuZ3JvdXBtYXJrZXJbMV0gPT09IHR4dC5jaGFyQXQoaSkgfHwgb3B0cy5hbHRlcm5hdG9ybWFya2VyID09PSB0eHQuY2hhckF0KGkpID8gZXNjYXBlZFR4dCArPSBcIlxcXFxcIiArIHR4dC5jaGFyQXQoaSkgOiBlc2NhcGVkVHh0ICs9IHR4dC5jaGFyQXQoaSk7XG4gICAgICAgICAgICByZXR1cm4gZXNjYXBlZFR4dDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhbGlnbkRpZ2l0cyhidWZmZXIsIGRpZ2l0cywgb3B0cywgZm9yY2UpIHtcbiAgICAgICAgICAgIGlmICgwIDwgYnVmZmVyLmxlbmd0aCAmJiAwIDwgZGlnaXRzICYmICghb3B0cy5kaWdpdHNPcHRpb25hbCB8fCBmb3JjZSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmFkaXhQb3NpdGlvbiA9ICQuaW5BcnJheShvcHRzLnJhZGl4UG9pbnQsIGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgLTEgPT09IHJhZGl4UG9zaXRpb24gJiYgKGJ1ZmZlci5wdXNoKG9wdHMucmFkaXhQb2ludCksIHJhZGl4UG9zaXRpb24gPSBidWZmZXIubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gZGlnaXRzOyBpKyspIGlzRmluaXRlKGJ1ZmZlcltyYWRpeFBvc2l0aW9uICsgaV0pIHx8IChidWZmZXJbcmFkaXhQb3NpdGlvbiArIGldID0gXCIwXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBmaW5kVmFsaWRhdG9yKHN5bWJvbCwgbWFza3NldCkge1xuICAgICAgICAgICAgdmFyIHBvc05keCA9IDA7XG4gICAgICAgICAgICBpZiAoXCIrXCIgPT09IHN5bWJvbCkge1xuICAgICAgICAgICAgICAgIGZvciAocG9zTmR4IGluIG1hc2tzZXQudmFsaWRQb3NpdGlvbnMpIDtcbiAgICAgICAgICAgICAgICBwb3NOZHggPSBwYXJzZUludChwb3NOZHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgdHN0TmR4IGluIG1hc2tzZXQudGVzdHMpIGlmICh0c3ROZHggPSBwYXJzZUludCh0c3ROZHgpLCBwb3NOZHggPD0gdHN0TmR4KSBmb3IgKHZhciBuZHggPSAwLCBuZHhsID0gbWFza3NldC50ZXN0c1t0c3ROZHhdLmxlbmd0aDsgbmR4IDwgbmR4bDsgbmR4KyspIGlmICgodm9pZCAwID09PSBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW3RzdE5keF0gfHwgXCItXCIgPT09IHN5bWJvbCkgJiYgbWFza3NldC50ZXN0c1t0c3ROZHhdW25keF0ubWF0Y2guZGVmID09PSBzeW1ib2wpIHJldHVybiB0c3ROZHggKyAodm9pZCAwICE9PSBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW3RzdE5keF0gJiYgXCItXCIgIT09IHN5bWJvbCA/IDEgOiAwKTtcbiAgICAgICAgICAgIHJldHVybiBwb3NOZHg7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZmluZFZhbGlkKHN5bWJvbCwgbWFza3NldCkge1xuICAgICAgICAgICAgdmFyIHJldCA9IC0xO1xuICAgICAgICAgICAgcmV0dXJuICQuZWFjaChtYXNrc2V0LnZhbGlkUG9zaXRpb25zLCBmdW5jdGlvbihuZHgsIHRzdCkge1xuICAgICAgICAgICAgICAgIGlmICh0c3QgJiYgdHN0Lm1hdGNoLmRlZiA9PT0gc3ltYm9sKSByZXR1cm4gcmV0ID0gcGFyc2VJbnQobmR4KSwgITE7XG4gICAgICAgICAgICB9KSwgcmV0O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlTWluTWF4T3B0aW9ucyhvcHRzKSB7XG4gICAgICAgICAgICB2b2lkIDAgPT09IG9wdHMucGFyc2VNaW5NYXhPcHRpb25zICYmIChudWxsICE9PSBvcHRzLm1pbiAmJiAob3B0cy5taW4gPSBvcHRzLm1pbi50b1N0cmluZygpLnJlcGxhY2UobmV3IFJlZ0V4cChJbnB1dG1hc2suZXNjYXBlUmVnZXgob3B0cy5ncm91cFNlcGFyYXRvciksIFwiZ1wiKSwgXCJcIiksIFxuICAgICAgICAgICAgXCIsXCIgPT09IG9wdHMucmFkaXhQb2ludCAmJiAob3B0cy5taW4gPSBvcHRzLm1pbi5yZXBsYWNlKG9wdHMucmFkaXhQb2ludCwgXCIuXCIpKSwgXG4gICAgICAgICAgICBvcHRzLm1pbiA9IGlzRmluaXRlKG9wdHMubWluKSA/IHBhcnNlRmxvYXQob3B0cy5taW4pIDogTmFOLCBpc05hTihvcHRzLm1pbikgJiYgKG9wdHMubWluID0gTnVtYmVyLk1JTl9WQUxVRSkpLCBcbiAgICAgICAgICAgIG51bGwgIT09IG9wdHMubWF4ICYmIChvcHRzLm1heCA9IG9wdHMubWF4LnRvU3RyaW5nKCkucmVwbGFjZShuZXcgUmVnRXhwKElucHV0bWFzay5lc2NhcGVSZWdleChvcHRzLmdyb3VwU2VwYXJhdG9yKSwgXCJnXCIpLCBcIlwiKSwgXG4gICAgICAgICAgICBcIixcIiA9PT0gb3B0cy5yYWRpeFBvaW50ICYmIChvcHRzLm1heCA9IG9wdHMubWF4LnJlcGxhY2Uob3B0cy5yYWRpeFBvaW50LCBcIi5cIikpLCBcbiAgICAgICAgICAgIG9wdHMubWF4ID0gaXNGaW5pdGUob3B0cy5tYXgpID8gcGFyc2VGbG9hdChvcHRzLm1heCkgOiBOYU4sIGlzTmFOKG9wdHMubWF4KSAmJiAob3B0cy5tYXggPSBOdW1iZXIuTUFYX1ZBTFVFKSksIFxuICAgICAgICAgICAgb3B0cy5wYXJzZU1pbk1heE9wdGlvbnMgPSBcImRvbmVcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2VuTWFzayhvcHRzKSB7XG4gICAgICAgICAgICBvcHRzLnJlcGVhdCA9IDAsIG9wdHMuZ3JvdXBTZXBhcmF0b3IgPT09IG9wdHMucmFkaXhQb2ludCAmJiBvcHRzLmRpZ2l0cyAmJiBcIjBcIiAhPT0gb3B0cy5kaWdpdHMgJiYgKFwiLlwiID09PSBvcHRzLnJhZGl4UG9pbnQgPyBvcHRzLmdyb3VwU2VwYXJhdG9yID0gXCIsXCIgOiBcIixcIiA9PT0gb3B0cy5yYWRpeFBvaW50ID8gb3B0cy5ncm91cFNlcGFyYXRvciA9IFwiLlwiIDogb3B0cy5ncm91cFNlcGFyYXRvciA9IFwiXCIpLCBcbiAgICAgICAgICAgIFwiIFwiID09PSBvcHRzLmdyb3VwU2VwYXJhdG9yICYmIChvcHRzLnNraXBPcHRpb25hbFBhcnRDaGFyYWN0ZXIgPSB2b2lkIDApLCAxIDwgb3B0cy5wbGFjZWhvbGRlci5sZW5ndGggJiYgKG9wdHMucGxhY2Vob2xkZXIgPSBvcHRzLnBsYWNlaG9sZGVyLmNoYXJBdCgwKSksIFxuICAgICAgICAgICAgXCJyYWRpeEZvY3VzXCIgPT09IG9wdHMucG9zaXRpb25DYXJldE9uQ2xpY2sgJiYgXCJcIiA9PT0gb3B0cy5wbGFjZWhvbGRlciAmJiAob3B0cy5wb3NpdGlvbkNhcmV0T25DbGljayA9IFwibHZwXCIpO1xuICAgICAgICAgICAgdmFyIGRlY2ltYWxEZWYgPSBcIjBcIiwgcmFkaXhQb2ludERlZiA9IG9wdHMucmFkaXhQb2ludDtcbiAgICAgICAgICAgICEwID09PSBvcHRzLm51bWVyaWNJbnB1dCAmJiB2b2lkIDAgPT09IG9wdHMuX19maW5hbmNlSW5wdXQgPyAoZGVjaW1hbERlZiA9IFwiMVwiLCBcbiAgICAgICAgICAgIG9wdHMucG9zaXRpb25DYXJldE9uQ2xpY2sgPSBcInJhZGl4Rm9jdXNcIiA9PT0gb3B0cy5wb3NpdGlvbkNhcmV0T25DbGljayA/IFwibHZwXCIgOiBvcHRzLnBvc2l0aW9uQ2FyZXRPbkNsaWNrLCBcbiAgICAgICAgICAgIG9wdHMuZGlnaXRzT3B0aW9uYWwgPSAhMSwgaXNOYU4ob3B0cy5kaWdpdHMpICYmIChvcHRzLmRpZ2l0cyA9IDIpLCBvcHRzLl9yYWRpeERhbmNlID0gITEsIFxuICAgICAgICAgICAgcmFkaXhQb2ludERlZiA9IFwiLFwiID09PSBvcHRzLnJhZGl4UG9pbnQgPyBcIj9cIiA6IFwiIVwiLCBcIlwiICE9PSBvcHRzLnJhZGl4UG9pbnQgJiYgdm9pZCAwID09PSBvcHRzLmRlZmluaXRpb25zW3JhZGl4UG9pbnREZWZdICYmIChvcHRzLmRlZmluaXRpb25zW3JhZGl4UG9pbnREZWZdID0ge30sIFxuICAgICAgICAgICAgb3B0cy5kZWZpbml0aW9uc1tyYWRpeFBvaW50RGVmXS52YWxpZGF0b3IgPSBcIltcIiArIG9wdHMucmFkaXhQb2ludCArIFwiXVwiLCBvcHRzLmRlZmluaXRpb25zW3JhZGl4UG9pbnREZWZdLnBsYWNlaG9sZGVyID0gb3B0cy5yYWRpeFBvaW50LCBcbiAgICAgICAgICAgIG9wdHMuZGVmaW5pdGlvbnNbcmFkaXhQb2ludERlZl0uc3RhdGljID0gITAsIG9wdHMuZGVmaW5pdGlvbnNbcmFkaXhQb2ludERlZl0uZ2VuZXJhdGVkID0gITApKSA6IChvcHRzLl9fZmluYW5jZUlucHV0ID0gITEsIFxuICAgICAgICAgICAgb3B0cy5udW1lcmljSW5wdXQgPSAhMCk7XG4gICAgICAgICAgICB2YXIgbWFzayA9IFwiWytdXCIsIGFsdE1hc2s7XG4gICAgICAgICAgICBpZiAobWFzayArPSBhdXRvRXNjYXBlKG9wdHMucHJlZml4LCBvcHRzKSwgXCJcIiAhPT0gb3B0cy5ncm91cFNlcGFyYXRvciA/ICh2b2lkIDAgPT09IG9wdHMuZGVmaW5pdGlvbnNbb3B0cy5ncm91cFNlcGFyYXRvcl0gJiYgKG9wdHMuZGVmaW5pdGlvbnNbb3B0cy5ncm91cFNlcGFyYXRvcl0gPSB7fSwgXG4gICAgICAgICAgICBvcHRzLmRlZmluaXRpb25zW29wdHMuZ3JvdXBTZXBhcmF0b3JdLnZhbGlkYXRvciA9IFwiW1wiICsgb3B0cy5ncm91cFNlcGFyYXRvciArIFwiXVwiLCBcbiAgICAgICAgICAgIG9wdHMuZGVmaW5pdGlvbnNbb3B0cy5ncm91cFNlcGFyYXRvcl0ucGxhY2Vob2xkZXIgPSBvcHRzLmdyb3VwU2VwYXJhdG9yLCBvcHRzLmRlZmluaXRpb25zW29wdHMuZ3JvdXBTZXBhcmF0b3JdLnN0YXRpYyA9ICEwLCBcbiAgICAgICAgICAgIG9wdHMuZGVmaW5pdGlvbnNbb3B0cy5ncm91cFNlcGFyYXRvcl0uZ2VuZXJhdGVkID0gITApLCBtYXNrICs9IG9wdHMuX21hc2sob3B0cykpIDogbWFzayArPSBcIjl7K31cIiwgXG4gICAgICAgICAgICB2b2lkIDAgIT09IG9wdHMuZGlnaXRzICYmIDAgIT09IG9wdHMuZGlnaXRzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRxID0gb3B0cy5kaWdpdHMudG9TdHJpbmcoKS5zcGxpdChcIixcIik7XG4gICAgICAgICAgICAgICAgaXNGaW5pdGUoZHFbMF0pICYmIGRxWzFdICYmIGlzRmluaXRlKGRxWzFdKSA/IG1hc2sgKz0gcmFkaXhQb2ludERlZiArIGRlY2ltYWxEZWYgKyBcIntcIiArIG9wdHMuZGlnaXRzICsgXCJ9XCIgOiAoaXNOYU4ob3B0cy5kaWdpdHMpIHx8IDAgPCBwYXJzZUludChvcHRzLmRpZ2l0cykpICYmIChvcHRzLmRpZ2l0c09wdGlvbmFsID8gKGFsdE1hc2sgPSBtYXNrICsgcmFkaXhQb2ludERlZiArIGRlY2ltYWxEZWYgKyBcInswLFwiICsgb3B0cy5kaWdpdHMgKyBcIn1cIiwgXG4gICAgICAgICAgICAgICAgb3B0cy5rZWVwU3RhdGljID0gITApIDogbWFzayArPSByYWRpeFBvaW50RGVmICsgZGVjaW1hbERlZiArIFwie1wiICsgb3B0cy5kaWdpdHMgKyBcIn1cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWFzayArPSBhdXRvRXNjYXBlKG9wdHMuc3VmZml4LCBvcHRzKSwgbWFzayArPSBcIlstXVwiLCBhbHRNYXNrICYmIChtYXNrID0gWyBhbHRNYXNrICsgYXV0b0VzY2FwZShvcHRzLnN1ZmZpeCwgb3B0cykgKyBcIlstXVwiLCBtYXNrIF0pLCBcbiAgICAgICAgICAgIG9wdHMuZ3JlZWR5ID0gITEsIHBhcnNlTWluTWF4T3B0aW9ucyhvcHRzKSwgbWFzaztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYW5uZGxlUmFkaXhEYW5jZShwb3MsIGMsIHJhZGl4UG9zLCBtYXNrc2V0LCBvcHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0cy5fcmFkaXhEYW5jZSAmJiBvcHRzLm51bWVyaWNJbnB1dCAmJiBjICE9PSBvcHRzLm5lZ2F0aW9uU3ltYm9sLmJhY2sgJiYgcG9zIDw9IHJhZGl4UG9zICYmICgwIDwgcmFkaXhQb3MgfHwgYyA9PSBvcHRzLnJhZGl4UG9pbnQpICYmICh2b2lkIDAgPT09IG1hc2tzZXQudmFsaWRQb3NpdGlvbnNbcG9zIC0gMV0gfHwgbWFza3NldC52YWxpZFBvc2l0aW9uc1twb3MgLSAxXS5pbnB1dCAhPT0gb3B0cy5uZWdhdGlvblN5bWJvbC5iYWNrKSAmJiAocG9zIC09IDEpLCBcbiAgICAgICAgICAgIHBvcztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBkZWNpbWFsVmFsaWRhdG9yKGNocnMsIG1hc2tzZXQsIHBvcywgc3RyaWN0LCBvcHRzKSB7XG4gICAgICAgICAgICB2YXIgcmFkaXhQb3MgPSBtYXNrc2V0LmJ1ZmZlciA/IG1hc2tzZXQuYnVmZmVyLmluZGV4T2Yob3B0cy5yYWRpeFBvaW50KSA6IC0xLCByZXN1bHQgPSAtMSAhPT0gcmFkaXhQb3MgJiYgbmV3IFJlZ0V4cChcIlswLTlcXHVmZjExLVxcdWZmMTldXCIpLnRlc3QoY2hycyk7XG4gICAgICAgICAgICByZXR1cm4gb3B0cy5fcmFkaXhEYW5jZSAmJiByZXN1bHQgJiYgbnVsbCA9PSBtYXNrc2V0LnZhbGlkUG9zaXRpb25zW3JhZGl4UG9zXSA/IHtcbiAgICAgICAgICAgICAgICBpbnNlcnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgcG9zOiByYWRpeFBvcyA9PT0gcG9zID8gcmFkaXhQb3MgKyAxIDogcmFkaXhQb3MsXG4gICAgICAgICAgICAgICAgICAgIGM6IG9wdHMucmFkaXhQb2ludFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcG9zOiBwb3NcbiAgICAgICAgICAgIH0gOiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hlY2tGb3JMZWFkaW5nWmVyb2VzKGJ1ZmZlciwgb3B0cykge1xuICAgICAgICAgICAgdmFyIG51bWJlck1hdGNoZXMgPSBuZXcgUmVnRXhwKFwiKF5cIiArIChcIlwiICE9PSBvcHRzLm5lZ2F0aW9uU3ltYm9sLmZyb250ID8gSW5wdXRtYXNrLmVzY2FwZVJlZ2V4KG9wdHMubmVnYXRpb25TeW1ib2wuZnJvbnQpICsgXCI/XCIgOiBcIlwiKSArIElucHV0bWFzay5lc2NhcGVSZWdleChvcHRzLnByZWZpeCkgKyBcIikoLiopKFwiICsgSW5wdXRtYXNrLmVzY2FwZVJlZ2V4KG9wdHMuc3VmZml4KSArIChcIlwiICE9IG9wdHMubmVnYXRpb25TeW1ib2wuYmFjayA/IElucHV0bWFzay5lc2NhcGVSZWdleChvcHRzLm5lZ2F0aW9uU3ltYm9sLmJhY2spICsgXCI/XCIgOiBcIlwiKSArIFwiJClcIikuZXhlYyhidWZmZXIuc2xpY2UoKS5yZXZlcnNlKCkuam9pbihcIlwiKSksIG51bWJlciA9IG51bWJlck1hdGNoZXMgPyBudW1iZXJNYXRjaGVzWzJdIDogXCJcIiwgbGVhZGluZ3plcm9lcyA9ICExO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciAmJiAobnVtYmVyID0gbnVtYmVyLnNwbGl0KG9wdHMucmFkaXhQb2ludC5jaGFyQXQoMCkpWzBdLCBsZWFkaW5nemVyb2VzID0gbmV3IFJlZ0V4cChcIl5bMFwiICsgb3B0cy5ncm91cFNlcGFyYXRvciArIFwiXSpcIikuZXhlYyhudW1iZXIpKSwgXG4gICAgICAgICAgICAhKCFsZWFkaW5nemVyb2VzIHx8ICEoMSA8IGxlYWRpbmd6ZXJvZXNbMF0ubGVuZ3RoIHx8IDAgPCBsZWFkaW5nemVyb2VzWzBdLmxlbmd0aCAmJiBsZWFkaW5nemVyb2VzWzBdLmxlbmd0aCA8IG51bWJlci5sZW5ndGgpKSAmJiBsZWFkaW5nemVyb2VzO1xuICAgICAgICB9XG4gICAgICAgIElucHV0bWFzay5leHRlbmRBbGlhc2VzKHtcbiAgICAgICAgICAgIG51bWVyaWM6IHtcbiAgICAgICAgICAgICAgICBtYXNrOiBnZW5NYXNrLFxuICAgICAgICAgICAgICAgIF9tYXNrOiBmdW5jdGlvbiBfbWFzayhvcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIihcIiArIG9wdHMuZ3JvdXBTZXBhcmF0b3IgKyBcIjk5OSl7K3wxfVwiO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGlnaXRzOiBcIipcIixcbiAgICAgICAgICAgICAgICBkaWdpdHNPcHRpb25hbDogITAsXG4gICAgICAgICAgICAgICAgZW5mb3JjZURpZ2l0c09uQmx1cjogITEsXG4gICAgICAgICAgICAgICAgcmFkaXhQb2ludDogXCIuXCIsXG4gICAgICAgICAgICAgICAgcG9zaXRpb25DYXJldE9uQ2xpY2s6IFwicmFkaXhGb2N1c1wiLFxuICAgICAgICAgICAgICAgIF9yYWRpeERhbmNlOiAhMCxcbiAgICAgICAgICAgICAgICBncm91cFNlcGFyYXRvcjogXCJcIixcbiAgICAgICAgICAgICAgICBhbGxvd01pbnVzOiAhMCxcbiAgICAgICAgICAgICAgICBuZWdhdGlvblN5bWJvbDoge1xuICAgICAgICAgICAgICAgICAgICBmcm9udDogXCItXCIsXG4gICAgICAgICAgICAgICAgICAgIGJhY2s6IFwiXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHByZWZpeDogXCJcIixcbiAgICAgICAgICAgICAgICBzdWZmaXg6IFwiXCIsXG4gICAgICAgICAgICAgICAgbWluOiBudWxsLFxuICAgICAgICAgICAgICAgIG1heDogbnVsbCxcbiAgICAgICAgICAgICAgICBzdGVwOiAxLFxuICAgICAgICAgICAgICAgIHVubWFza0FzTnVtYmVyOiAhMSxcbiAgICAgICAgICAgICAgICByb3VuZGluZ0ZOOiBNYXRoLnJvdW5kLFxuICAgICAgICAgICAgICAgIGlucHV0bW9kZTogXCJudW1lcmljXCIsXG4gICAgICAgICAgICAgICAgc2hvcnRjdXRzOiB7XG4gICAgICAgICAgICAgICAgICAgIGs6IFwiMDAwXCIsXG4gICAgICAgICAgICAgICAgICAgIG06IFwiMDAwMDAwXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIjBcIixcbiAgICAgICAgICAgICAgICBncmVlZHk6ICExLFxuICAgICAgICAgICAgICAgIHJpZ2h0QWxpZ246ICEwLFxuICAgICAgICAgICAgICAgIGluc2VydE1vZGU6ICEwLFxuICAgICAgICAgICAgICAgIGF1dG9Vbm1hc2s6ICExLFxuICAgICAgICAgICAgICAgIHNraXBPcHRpb25hbFBhcnRDaGFyYWN0ZXI6IFwiXCIsXG4gICAgICAgICAgICAgICAgZGVmaW5pdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgMDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBkZWNpbWFsVmFsaWRhdG9yXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcjogZGVjaW1hbFZhbGlkYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25TeW1ib2w6IFwiOVwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiK1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcihjaHJzLCBtYXNrc2V0LCBwb3MsIHN0cmljdCwgb3B0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRzLmFsbG93TWludXMgJiYgKFwiLVwiID09PSBjaHJzIHx8IGNocnMgPT09IG9wdHMubmVnYXRpb25TeW1ib2wuZnJvbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIi1cIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IoY2hycywgbWFza3NldCwgcG9zLCBzdHJpY3QsIG9wdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0cy5hbGxvd01pbnVzICYmIGNocnMgPT09IG9wdHMubmVnYXRpb25TeW1ib2wuYmFjaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcHJlVmFsaWRhdGlvbjogZnVuY3Rpb24gcHJlVmFsaWRhdGlvbihidWZmZXIsIHBvcywgYywgaXNTZWxlY3Rpb24sIG9wdHMsIG1hc2tzZXQsIGNhcmV0UG9zLCBzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCExICE9PSBvcHRzLl9fZmluYW5jZUlucHV0ICYmIGMgPT09IG9wdHMucmFkaXhQb2ludCkgcmV0dXJuICExO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGF0dGVybjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhdHRlcm4gPSBvcHRzLnNob3J0Y3V0cyAmJiBvcHRzLnNob3J0Y3V0c1tjXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDEgPCBwYXR0ZXJuLmxlbmd0aCkgZm9yICh2YXIgaW5zZXJ0cyA9IFtdLCBpID0gMDsgaSA8IHBhdHRlcm4ubGVuZ3RoOyBpKyspIGluc2VydHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zOiBwb3MgKyBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IHBhdHRlcm5baV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWN0OiAhMVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydDogaW5zZXJ0c1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgcmFkaXhQb3MgPSAkLmluQXJyYXkob3B0cy5yYWRpeFBvaW50LCBidWZmZXIpLCBpbml0UG9zID0gcG9zO1xuICAgICAgICAgICAgICAgICAgICBpZiAocG9zID0gaGFubmRsZVJhZGl4RGFuY2UocG9zLCBjLCByYWRpeFBvcywgbWFza3NldCwgb3B0cyksIFwiLVwiID09PSBjIHx8IGMgPT09IG9wdHMubmVnYXRpb25TeW1ib2wuZnJvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghMCAhPT0gb3B0cy5hbGxvd01pbnVzKSByZXR1cm4gITE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNOZWdhdGl2ZSA9ICExLCBmcm9udCA9IGZpbmRWYWxpZChcIitcIiwgbWFza3NldCksIGJhY2sgPSBmaW5kVmFsaWQoXCItXCIsIG1hc2tzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xICE9PSBmcm9udCAmJiAoaXNOZWdhdGl2ZSA9IFsgZnJvbnQsIGJhY2sgXSksICExICE9PSBpc05lZ2F0aXZlID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZTogaXNOZWdhdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJldDogaW5pdFBvc1xuICAgICAgICAgICAgICAgICAgICAgICAgfSA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnQ6IFsge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3M6IGZpbmRWYWxpZGF0b3IoXCIrXCIsIG1hc2tzZXQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBvcHRzLm5lZ2F0aW9uU3ltYm9sLmZyb250LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tSXNWYWxpZDogITBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvczogZmluZFZhbGlkYXRvcihcIi1cIiwgbWFza3NldCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IG9wdHMubmVnYXRpb25TeW1ib2wuYmFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUlzVmFsaWQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJldDogaW5pdFBvcyArIG9wdHMubmVnYXRpb25TeW1ib2wuYmFjay5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmljdCkgcmV0dXJuICEwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoLTEgIT09IHJhZGl4UG9zICYmICEwID09PSBvcHRzLl9yYWRpeERhbmNlICYmICExID09PSBpc1NlbGVjdGlvbiAmJiBjID09PSBvcHRzLnJhZGl4UG9pbnQgJiYgdm9pZCAwICE9PSBvcHRzLmRpZ2l0cyAmJiAoaXNOYU4ob3B0cy5kaWdpdHMpIHx8IDAgPCBwYXJzZUludChvcHRzLmRpZ2l0cykpICYmIHJhZGl4UG9zICE9PSBwb3MpIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJldDogb3B0cy5fcmFkaXhEYW5jZSAmJiBwb3MgPT09IHJhZGl4UG9zIC0gMSA/IHJhZGl4UG9zICsgMSA6IHJhZGl4UG9zXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGlmICghMSA9PT0gb3B0cy5fX2ZpbmFuY2VJbnB1dCkgaWYgKGlzU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5kaWdpdHNPcHRpb25hbCkgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXdyaXRlUG9zaXRpb246IGNhcmV0UG9zLmVuZFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0cy5kaWdpdHNPcHRpb25hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXJldFBvcy5iZWdpbiA+IHJhZGl4UG9zICYmIGNhcmV0UG9zLmVuZCA8PSByYWRpeFBvcykgcmV0dXJuIGMgPT09IG9wdHMucmFkaXhQb2ludCA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3M6IHJhZGl4UG9zICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUlzVmFsaWQ6ICEwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJld3JpdGVQb3NpdGlvbjogcmFkaXhQb3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXdyaXRlUG9zaXRpb246IHJhZGl4UG9zICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhcmV0UG9zLmJlZ2luIDwgcmFkaXhQb3MpIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJld3JpdGVQb3NpdGlvbjogY2FyZXRQb3MuYmVnaW4gLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghb3B0cy5zaG93TWFza09uSG92ZXIgJiYgIW9wdHMuc2hvd01hc2tPbkZvY3VzICYmICFvcHRzLmRpZ2l0c09wdGlvbmFsICYmIDAgPCBvcHRzLmRpZ2l0cyAmJiBcIlwiID09PSB0aGlzLmlucHV0bWFzay5fX3ZhbHVlR2V0LmNhbGwodGhpcykpIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXdyaXRlUG9zaXRpb246IHJhZGl4UG9zXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXdyaXRlUG9zaXRpb246IHBvc1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcG9zdFZhbGlkYXRpb246IGZ1bmN0aW9uIHBvc3RWYWxpZGF0aW9uKGJ1ZmZlciwgcG9zLCBjLCBjdXJyZW50UmVzdWx0LCBvcHRzLCBtYXNrc2V0LCBzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCExID09PSBjdXJyZW50UmVzdWx0KSByZXR1cm4gY3VycmVudFJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmljdCkgcmV0dXJuICEwO1xuICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gb3B0cy5taW4gfHwgbnVsbCAhPT0gb3B0cy5tYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bm1hc2tlZCA9IG9wdHMub25Vbk1hc2soYnVmZmVyLnNsaWNlKCkucmV2ZXJzZSgpLmpvaW4oXCJcIiksIHZvaWQgMCwgJC5leHRlbmQoe30sIG9wdHMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm1hc2tBc051bWJlcjogITBcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsICE9PSBvcHRzLm1pbiAmJiB1bm1hc2tlZCA8IG9wdHMubWluICYmICh1bm1hc2tlZC50b1N0cmluZygpLmxlbmd0aCA+PSBvcHRzLm1pbi50b1N0cmluZygpLmxlbmd0aCB8fCB1bm1hc2tlZCA8IDApKSByZXR1cm4gITE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gb3B0cy5tYXggJiYgdW5tYXNrZWQgPiBvcHRzLm1heCkgcmV0dXJuICExO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UmVzdWx0O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25Vbk1hc2s6IGZ1bmN0aW9uIG9uVW5NYXNrKG1hc2tlZFZhbHVlLCB1bm1hc2tlZFZhbHVlLCBvcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcIlwiID09PSB1bm1hc2tlZFZhbHVlICYmICEwID09PSBvcHRzLm51bGxhYmxlKSByZXR1cm4gdW5tYXNrZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByb2Nlc3NWYWx1ZSA9IG1hc2tlZFZhbHVlLnJlcGxhY2Uob3B0cy5wcmVmaXgsIFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc1ZhbHVlID0gcHJvY2Vzc1ZhbHVlLnJlcGxhY2Uob3B0cy5zdWZmaXgsIFwiXCIpLCBwcm9jZXNzVmFsdWUgPSBwcm9jZXNzVmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKElucHV0bWFzay5lc2NhcGVSZWdleChvcHRzLmdyb3VwU2VwYXJhdG9yKSwgXCJnXCIpLCBcIlwiKSwgXG4gICAgICAgICAgICAgICAgICAgIFwiXCIgIT09IG9wdHMucGxhY2Vob2xkZXIuY2hhckF0KDApICYmIChwcm9jZXNzVmFsdWUgPSBwcm9jZXNzVmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKG9wdHMucGxhY2Vob2xkZXIuY2hhckF0KDApLCBcImdcIiksIFwiMFwiKSksIFxuICAgICAgICAgICAgICAgICAgICBvcHRzLnVubWFza0FzTnVtYmVyID8gKFwiXCIgIT09IG9wdHMucmFkaXhQb2ludCAmJiAtMSAhPT0gcHJvY2Vzc1ZhbHVlLmluZGV4T2Yob3B0cy5yYWRpeFBvaW50KSAmJiAocHJvY2Vzc1ZhbHVlID0gcHJvY2Vzc1ZhbHVlLnJlcGxhY2UoSW5wdXRtYXNrLmVzY2FwZVJlZ2V4LmNhbGwodGhpcywgb3B0cy5yYWRpeFBvaW50KSwgXCIuXCIpKSwgXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NWYWx1ZSA9IHByb2Nlc3NWYWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoXCJeXCIgKyBJbnB1dG1hc2suZXNjYXBlUmVnZXgob3B0cy5uZWdhdGlvblN5bWJvbC5mcm9udCkpLCBcIi1cIiksIFxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzVmFsdWUgPSBwcm9jZXNzVmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKElucHV0bWFzay5lc2NhcGVSZWdleChvcHRzLm5lZ2F0aW9uU3ltYm9sLmJhY2spICsgXCIkXCIpLCBcIlwiKSwgXG4gICAgICAgICAgICAgICAgICAgIE51bWJlcihwcm9jZXNzVmFsdWUpKSA6IHByb2Nlc3NWYWx1ZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGlzQ29tcGxldGU6IGZ1bmN0aW9uIGlzQ29tcGxldGUoYnVmZmVyLCBvcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXNrZWRWYWx1ZSA9IChvcHRzLm51bWVyaWNJbnB1dCA/IGJ1ZmZlci5zbGljZSgpLnJldmVyc2UoKSA6IGJ1ZmZlcikuam9pbihcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hc2tlZFZhbHVlID0gbWFza2VkVmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKFwiXlwiICsgSW5wdXRtYXNrLmVzY2FwZVJlZ2V4KG9wdHMubmVnYXRpb25TeW1ib2wuZnJvbnQpKSwgXCItXCIpLCBcbiAgICAgICAgICAgICAgICAgICAgbWFza2VkVmFsdWUgPSBtYXNrZWRWYWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoSW5wdXRtYXNrLmVzY2FwZVJlZ2V4KG9wdHMubmVnYXRpb25TeW1ib2wuYmFjaykgKyBcIiRcIiksIFwiXCIpLCBcbiAgICAgICAgICAgICAgICAgICAgbWFza2VkVmFsdWUgPSBtYXNrZWRWYWx1ZS5yZXBsYWNlKG9wdHMucHJlZml4LCBcIlwiKSwgbWFza2VkVmFsdWUgPSBtYXNrZWRWYWx1ZS5yZXBsYWNlKG9wdHMuc3VmZml4LCBcIlwiKSwgXG4gICAgICAgICAgICAgICAgICAgIG1hc2tlZFZhbHVlID0gbWFza2VkVmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKElucHV0bWFzay5lc2NhcGVSZWdleChvcHRzLmdyb3VwU2VwYXJhdG9yKSArIFwiKFswLTldezN9KVwiLCBcImdcIiksIFwiJDFcIiksIFxuICAgICAgICAgICAgICAgICAgICBcIixcIiA9PT0gb3B0cy5yYWRpeFBvaW50ICYmIChtYXNrZWRWYWx1ZSA9IG1hc2tlZFZhbHVlLnJlcGxhY2UoSW5wdXRtYXNrLmVzY2FwZVJlZ2V4KG9wdHMucmFkaXhQb2ludCksIFwiLlwiKSksIFxuICAgICAgICAgICAgICAgICAgICBpc0Zpbml0ZShtYXNrZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbkJlZm9yZU1hc2s6IGZ1bmN0aW9uIG9uQmVmb3JlTWFzayhpbml0aWFsVmFsdWUsIG9wdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJhZGl4UG9pbnQgPSBvcHRzLnJhZGl4UG9pbnQgfHwgXCIsXCI7XG4gICAgICAgICAgICAgICAgICAgIGlzRmluaXRlKG9wdHMuZGlnaXRzKSAmJiAob3B0cy5kaWdpdHMgPSBwYXJzZUludChvcHRzLmRpZ2l0cykpLCBcIm51bWJlclwiICE9IHR5cGVvZiBpbml0aWFsVmFsdWUgJiYgXCJudW1iZXJcIiAhPT0gb3B0cy5pbnB1dFR5cGUgfHwgXCJcIiA9PT0gcmFkaXhQb2ludCB8fCAoaW5pdGlhbFZhbHVlID0gaW5pdGlhbFZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZShcIi5cIiwgcmFkaXhQb2ludCkpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVQYXJ0cyA9IGluaXRpYWxWYWx1ZS5zcGxpdChyYWRpeFBvaW50KSwgaW50ZWdlclBhcnQgPSB2YWx1ZVBhcnRzWzBdLnJlcGxhY2UoL1teXFwtMC05XS9nLCBcIlwiKSwgZGVjaW1hbFBhcnQgPSAxIDwgdmFsdWVQYXJ0cy5sZW5ndGggPyB2YWx1ZVBhcnRzWzFdLnJlcGxhY2UoL1teMC05XS9nLCBcIlwiKSA6IFwiXCIsIGZvcmNlRGlnaXRzID0gMSA8IHZhbHVlUGFydHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWUgPSBpbnRlZ2VyUGFydCArIChcIlwiICE9PSBkZWNpbWFsUGFydCA/IHJhZGl4UG9pbnQgKyBkZWNpbWFsUGFydCA6IGRlY2ltYWxQYXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpZ2l0cyA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcIlwiICE9PSByYWRpeFBvaW50ICYmIChkaWdpdHMgPSBvcHRzLmRpZ2l0c09wdGlvbmFsID8gb3B0cy5kaWdpdHMgPCBkZWNpbWFsUGFydC5sZW5ndGggPyBvcHRzLmRpZ2l0cyA6IGRlY2ltYWxQYXJ0Lmxlbmd0aCA6IG9wdHMuZGlnaXRzLCBcbiAgICAgICAgICAgICAgICAgICAgXCJcIiAhPT0gZGVjaW1hbFBhcnQgfHwgIW9wdHMuZGlnaXRzT3B0aW9uYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlnaXRzRmFjdG9yID0gTWF0aC5wb3coMTAsIGRpZ2l0cyB8fCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZSA9IGluaXRpYWxWYWx1ZS5yZXBsYWNlKElucHV0bWFzay5lc2NhcGVSZWdleChyYWRpeFBvaW50KSwgXCIuXCIpLCBpc05hTihwYXJzZUZsb2F0KGluaXRpYWxWYWx1ZSkpIHx8IChpbml0aWFsVmFsdWUgPSAob3B0cy5yb3VuZGluZ0ZOKHBhcnNlRmxvYXQoaW5pdGlhbFZhbHVlKSAqIGRpZ2l0c0ZhY3RvcikgLyBkaWdpdHNGYWN0b3IpLnRvRml4ZWQoZGlnaXRzKSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlID0gaW5pdGlhbFZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZShcIi5cIiwgcmFkaXhQb2ludCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IG9wdHMuZGlnaXRzICYmIC0xICE9PSBpbml0aWFsVmFsdWUuaW5kZXhPZihyYWRpeFBvaW50KSAmJiAoaW5pdGlhbFZhbHVlID0gaW5pdGlhbFZhbHVlLnN1YnN0cmluZygwLCBpbml0aWFsVmFsdWUuaW5kZXhPZihyYWRpeFBvaW50KSkpLCBcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gb3B0cy5taW4gfHwgbnVsbCAhPT0gb3B0cy5tYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1iZXJWYWx1ZSA9IGluaXRpYWxWYWx1ZS50b1N0cmluZygpLnJlcGxhY2UocmFkaXhQb2ludCwgXCIuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gb3B0cy5taW4gJiYgbnVtYmVyVmFsdWUgPCBvcHRzLm1pbiA/IGluaXRpYWxWYWx1ZSA9IG9wdHMubWluLnRvU3RyaW5nKCkucmVwbGFjZShcIi5cIiwgcmFkaXhQb2ludCkgOiBudWxsICE9PSBvcHRzLm1heCAmJiBudW1iZXJWYWx1ZSA+IG9wdHMubWF4ICYmIChpbml0aWFsVmFsdWUgPSBvcHRzLm1heC50b1N0cmluZygpLnJlcGxhY2UoXCIuXCIsIHJhZGl4UG9pbnQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxpZ25EaWdpdHMoaW5pdGlhbFZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoXCJcIiksIGRpZ2l0cywgb3B0cywgZm9yY2VEaWdpdHMpLmpvaW4oXCJcIik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbkJlZm9yZVdyaXRlOiBmdW5jdGlvbiBvbkJlZm9yZVdyaXRlKGUsIGJ1ZmZlciwgY2FyZXRQb3MsIG9wdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc3RyaXBCdWZmZXIoYnVmZmVyLCBzdHJpcFJhZGl4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoITEgIT09IG9wdHMuX19maW5hbmNlSW5wdXQgfHwgc3RyaXBSYWRpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9ICQuaW5BcnJheShvcHRzLnJhZGl4UG9pbnQsIGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgIT09IHBvc2l0aW9uICYmIGJ1ZmZlci5zcGxpY2UocG9zaXRpb24sIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFwiXCIgIT09IG9wdHMuZ3JvdXBTZXBhcmF0b3IpIGZvciAoOy0xICE9PSAocG9zaXRpb24gPSBidWZmZXIuaW5kZXhPZihvcHRzLmdyb3VwU2VwYXJhdG9yKSk7ICkgYnVmZmVyLnNwbGljZShwb3NpdGlvbiwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQsIGxlYWRpbmd6ZXJvZXMgPSBjaGVja0ZvckxlYWRpbmdaZXJvZXMoYnVmZmVyLCBvcHRzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxlYWRpbmd6ZXJvZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWYgPSBidWZmZXIuc2xpY2UoKS5yZXZlcnNlKCksIGNhcmV0TmR4ID0gYnVmLmpvaW4oXCJcIikuaW5kZXhPZihsZWFkaW5nemVyb2VzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5zcGxpY2UoY2FyZXROZHgsIGxlYWRpbmd6ZXJvZXNbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdDYXJldFBvcyA9IGJ1Zi5sZW5ndGggLSBjYXJldE5keDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwQnVmZmVyKGJ1ZiksIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoRnJvbUJ1ZmZlcjogITAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyOiBidWYucmV2ZXJzZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmV0OiBjYXJldFBvcyA8IG5ld0NhcmV0UG9zID8gY2FyZXRQb3MgOiBuZXdDYXJldFBvc1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZSkgc3dpdGNoIChlLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYmx1clwiOlxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJjaGVja3ZhbFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgIT09IG9wdHMubWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVubWFza2VkID0gb3B0cy5vblVuTWFzayhidWZmZXIuc2xpY2UoKS5yZXZlcnNlKCkuam9pbihcIlwiKSwgdm9pZCAwLCAkLmV4dGVuZCh7fSwgb3B0cywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm1hc2tBc051bWJlcjogITBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgIT09IG9wdHMubWluICYmIHVubWFza2VkIDwgb3B0cy5taW4pIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hGcm9tQnVmZmVyOiAhMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyOiBhbGlnbkRpZ2l0cyhvcHRzLm1pbi50b1N0cmluZygpLnJlcGxhY2UoXCIuXCIsIG9wdHMucmFkaXhQb2ludCkuc3BsaXQoXCJcIiksIG9wdHMuZGlnaXRzLCBvcHRzKS5yZXZlcnNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlcltidWZmZXIubGVuZ3RoIC0gMV0gPT09IG9wdHMubmVnYXRpb25TeW1ib2wuZnJvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm1ick10Y2hzID0gbmV3IFJlZ0V4cChcIiheXCIgKyAoXCJcIiAhPSBvcHRzLm5lZ2F0aW9uU3ltYm9sLmZyb250ID8gSW5wdXRtYXNrLmVzY2FwZVJlZ2V4KG9wdHMubmVnYXRpb25TeW1ib2wuZnJvbnQpICsgXCI/XCIgOiBcIlwiKSArIElucHV0bWFzay5lc2NhcGVSZWdleChvcHRzLnByZWZpeCkgKyBcIikoLiopKFwiICsgSW5wdXRtYXNrLmVzY2FwZVJlZ2V4KG9wdHMuc3VmZml4KSArIChcIlwiICE9IG9wdHMubmVnYXRpb25TeW1ib2wuYmFjayA/IElucHV0bWFzay5lc2NhcGVSZWdleChvcHRzLm5lZ2F0aW9uU3ltYm9sLmJhY2spICsgXCI/XCIgOiBcIlwiKSArIFwiJClcIikuZXhlYyhzdHJpcEJ1ZmZlcihidWZmZXIuc2xpY2UoKSwgITApLnJldmVyc2UoKS5qb2luKFwiXCIpKSwgbnVtYmVyID0gbm1ick10Y2hzID8gbm1ick10Y2hzWzJdIDogXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwID09IG51bWJlciAmJiAocmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoRnJvbUJ1ZmZlcjogITAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcjogWyAwIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBcIlwiICE9PSBvcHRzLnJhZGl4UG9pbnQgJiYgYnVmZmVyWzBdID09PSBvcHRzLnJhZGl4UG9pbnQgJiYgKHJlc3VsdCAmJiByZXN1bHQuYnVmZmVyID8gcmVzdWx0LmJ1ZmZlci5zaGlmdCgpIDogKGJ1ZmZlci5zaGlmdCgpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoRnJvbUJ1ZmZlcjogITAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyOiBzdHJpcEJ1ZmZlcihidWZmZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5lbmZvcmNlRGlnaXRzT25CbHVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiZmZyID0gcmVzdWx0ICYmIHJlc3VsdC5idWZmZXIgfHwgYnVmZmVyLnNsaWNlKCkucmV2ZXJzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yZWZyZXNoRnJvbUJ1ZmZlciA9ICEwLCByZXN1bHQuYnVmZmVyID0gYWxpZ25EaWdpdHMoYmZmciwgb3B0cy5kaWdpdHMsIG9wdHMsICEwKS5yZXZlcnNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uS2V5RG93bjogZnVuY3Rpb24gb25LZXlEb3duKGUsIGJ1ZmZlciwgY2FyZXRQb3MsIG9wdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRpbnB1dCA9ICQodGhpcyksIGJmZnI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmN0cmxLZXkpIHN3aXRjaCAoZS5rZXlDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSBrZXlDb2RlLlVQOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRtYXNrLl9fdmFsdWVTZXQuY2FsbCh0aGlzLCBwYXJzZUZsb2F0KHRoaXMuaW5wdXRtYXNrLnVubWFza2VkdmFsdWUoKSkgKyBwYXJzZUludChvcHRzLnN0ZXApKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQudHJpZ2dlcihcInNldHZhbHVlXCIpLCAhMTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2V5Q29kZS5ET1dOOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRtYXNrLl9fdmFsdWVTZXQuY2FsbCh0aGlzLCBwYXJzZUZsb2F0KHRoaXMuaW5wdXRtYXNrLnVubWFza2VkdmFsdWUoKSkgLSBwYXJzZUludChvcHRzLnN0ZXApKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQudHJpZ2dlcihcInNldHZhbHVlXCIpLCAhMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWUuc2hpZnRLZXkgJiYgKGUua2V5Q29kZSA9PT0ga2V5Q29kZS5ERUxFVEUgfHwgZS5rZXlDb2RlID09PSBrZXlDb2RlLkJBQ0tTUEFDRSB8fCBlLmtleUNvZGUgPT09IGtleUNvZGUuQkFDS1NQQUNFX1NBRkFSSSkgJiYgY2FyZXRQb3MuYmVnaW4gIT09IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJbZS5rZXlDb2RlID09PSBrZXlDb2RlLkRFTEVURSA/IGNhcmV0UG9zLmJlZ2luIC0gMSA6IGNhcmV0UG9zLmVuZF0gPT09IG9wdHMubmVnYXRpb25TeW1ib2wuZnJvbnQpIHJldHVybiBiZmZyID0gYnVmZmVyLnNsaWNlKCkucmV2ZXJzZSgpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXCIgIT09IG9wdHMubmVnYXRpb25TeW1ib2wuZnJvbnQgJiYgYmZmci5zaGlmdCgpLCBcIlwiICE9PSBvcHRzLm5lZ2F0aW9uU3ltYm9sLmJhY2sgJiYgYmZmci5wb3AoKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQudHJpZ2dlcihcInNldHZhbHVlXCIsIFsgYmZmci5qb2luKFwiXCIpLCBjYXJldFBvcy5iZWdpbiBdKSwgITE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoITAgPT09IG9wdHMuX3JhZGl4RGFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFkaXhQb3MgPSAkLmluQXJyYXkob3B0cy5yYWRpeFBvaW50LCBidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLmRpZ2l0c09wdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSByYWRpeFBvcykgcmV0dXJuIGJmZnIgPSBidWZmZXIuc2xpY2UoKS5yZXZlcnNlKCksIGJmZnIucG9wKCksICRpbnB1dC50cmlnZ2VyKFwic2V0dmFsdWVcIiwgWyBiZmZyLmpvaW4oXCJcIiksIGNhcmV0UG9zLmJlZ2luID49IGJmZnIubGVuZ3RoID8gYmZmci5sZW5ndGggOiBjYXJldFBvcy5iZWdpbiBdKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoLTEgIT09IHJhZGl4UG9zICYmIChjYXJldFBvcy5iZWdpbiA8IHJhZGl4UG9zIHx8IGNhcmV0UG9zLmVuZCA8IHJhZGl4UG9zIHx8IGUua2V5Q29kZSA9PT0ga2V5Q29kZS5ERUxFVEUgJiYgY2FyZXRQb3MuYmVnaW4gPT09IHJhZGl4UG9zKSkgcmV0dXJuIGNhcmV0UG9zLmJlZ2luICE9PSBjYXJldFBvcy5lbmQgfHwgZS5rZXlDb2RlICE9PSBrZXlDb2RlLkJBQ0tTUEFDRSAmJiBlLmtleUNvZGUgIT09IGtleUNvZGUuQkFDS1NQQUNFX1NBRkFSSSB8fCBjYXJldFBvcy5iZWdpbisrLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZmZyID0gYnVmZmVyLnNsaWNlKCkucmV2ZXJzZSgpLCBiZmZyLnNwbGljZShiZmZyLmxlbmd0aCAtIGNhcmV0UG9zLmJlZ2luLCBjYXJldFBvcy5iZWdpbiAtIGNhcmV0UG9zLmVuZCArIDEpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZmZyID0gYWxpZ25EaWdpdHMoYmZmciwgb3B0cy5kaWdpdHMsIG9wdHMpLmpvaW4oXCJcIiksICRpbnB1dC50cmlnZ2VyKFwic2V0dmFsdWVcIiwgWyBiZmZyLCBjYXJldFBvcy5iZWdpbiA+PSBiZmZyLmxlbmd0aCA/IHJhZGl4UG9zICsgMSA6IGNhcmV0UG9zLmJlZ2luIF0pLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjdXJyZW5jeToge1xuICAgICAgICAgICAgICAgIHByZWZpeDogXCJcIixcbiAgICAgICAgICAgICAgICBncm91cFNlcGFyYXRvcjogXCIsXCIsXG4gICAgICAgICAgICAgICAgYWxpYXM6IFwibnVtZXJpY1wiLFxuICAgICAgICAgICAgICAgIGRpZ2l0czogMixcbiAgICAgICAgICAgICAgICBkaWdpdHNPcHRpb25hbDogITFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWNpbWFsOiB7XG4gICAgICAgICAgICAgICAgYWxpYXM6IFwibnVtZXJpY1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW50ZWdlcjoge1xuICAgICAgICAgICAgICAgIGFsaWFzOiBcIm51bWVyaWNcIixcbiAgICAgICAgICAgICAgICBkaWdpdHM6IDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwZXJjZW50YWdlOiB7XG4gICAgICAgICAgICAgICAgYWxpYXM6IFwibnVtZXJpY1wiLFxuICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICBtYXg6IDEwMCxcbiAgICAgICAgICAgICAgICBzdWZmaXg6IFwiICVcIixcbiAgICAgICAgICAgICAgICBkaWdpdHM6IDAsXG4gICAgICAgICAgICAgICAgYWxsb3dNaW51czogITFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbmRpYW5uczoge1xuICAgICAgICAgICAgICAgIGFsaWFzOiBcIm51bWVyaWNcIixcbiAgICAgICAgICAgICAgICBfbWFzazogZnVuY3Rpb24gX21hc2sob3B0cykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCIoXCIgKyBvcHRzLmdyb3VwU2VwYXJhdG9yICsgXCI5OSl7KnwxfShcIiArIG9wdHMuZ3JvdXBTZXBhcmF0b3IgKyBcIjk5OSl7MXwxfVwiO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ3JvdXBTZXBhcmF0b3I6IFwiLFwiLFxuICAgICAgICAgICAgICAgIHJhZGl4UG9pbnQ6IFwiLlwiLFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIjBcIixcbiAgICAgICAgICAgICAgICBkaWdpdHM6IDIsXG4gICAgICAgICAgICAgICAgZGlnaXRzT3B0aW9uYWw6ICExXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLCBtb2R1bGUuZXhwb3J0cyA9IElucHV0bWFzaztcbiAgICB9LCBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHZhciBfaW5wdXRtYXNrID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKTtcbiAgICAgICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICAgICAgICAgIH0gOiBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gICAgICAgICAgICB9LCBfdHlwZW9mKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICAgICAgICAgICAgcmV0dXJuICFjYWxsIHx8IFwib2JqZWN0XCIgIT09IF90eXBlb2YoY2FsbCkgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBjYWxsID8gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSA6IGNhbGw7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgICAgICAgICBpZiAodm9pZCAwID09PSBzZWxmKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIHN1cGVyQ2xhc3MgJiYgbnVsbCAhPT0gc3VwZXJDbGFzcykgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSwgc3VwZXJDbGFzcyAmJiBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpIHtcbiAgICAgICAgICAgIHZhciBfY2FjaGUgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIE1hcCA/IG5ldyBNYXAoKSA6IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiBfd3JhcE5hdGl2ZVN1cGVyID0gZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykge1xuICAgICAgICAgICAgICAgIGlmIChudWxsID09PSBDbGFzcyB8fCAhX2lzTmF0aXZlRnVuY3Rpb24oQ2xhc3MpKSByZXR1cm4gQ2xhc3M7XG4gICAgICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgQ2xhc3MpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgICAgICAgICBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgX2NhY2hlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfY2FjaGUuaGFzKENsYXNzKSkgcmV0dXJuIF9jYWNoZS5nZXQoQ2xhc3MpO1xuICAgICAgICAgICAgICAgICAgICBfY2FjaGUuc2V0KENsYXNzLCBXcmFwcGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JhcHBlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb25zdHJ1Y3QoQ2xhc3MsIGFyZ3VtZW50cywgX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFdyYXBwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBXcmFwcGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSwgX3NldFByb3RvdHlwZU9mKFdyYXBwZXIsIENsYXNzKTtcbiAgICAgICAgICAgIH0sIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICAgICAgICAgIGlmIChcInVuZGVmaW5lZFwiID09IHR5cGVvZiBSZWZsZWN0IHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuICExO1xuICAgICAgICAgICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiAhMTtcbiAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFByb3h5KSByZXR1cm4gITA7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbigpIHt9KSksIFxuICAgICAgICAgICAgICAgICEwO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgICAgICAgIHJldHVybiBfY29uc3RydWN0ID0gaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdCA6IGZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykge1xuICAgICAgICAgICAgICAgIHZhciBhID0gWyBudWxsIF07XG4gICAgICAgICAgICAgICAgYS5wdXNoLmFwcGx5KGEsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIHZhciBDb25zdHJ1Y3RvciA9IEZ1bmN0aW9uLmJpbmQuYXBwbHkoUGFyZW50LCBhKSwgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gQ2xhc3MgJiYgX3NldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpLCBpbnN0YW5jZTtcbiAgICAgICAgICAgIH0sIF9jb25zdHJ1Y3QuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaXNOYXRpdmVGdW5jdGlvbihmbikge1xuICAgICAgICAgICAgcmV0dXJuIC0xICE9PSBGdW5jdGlvbi50b1N0cmluZy5jYWxsKGZuKS5pbmRleE9mKFwiW25hdGl2ZSBjb2RlXVwiKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyA9IHAsIG87XG4gICAgICAgICAgICB9LCBfc2V0UHJvdG90eXBlT2YobywgcCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICAgICAgICAgIHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICAgICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgICAgICAgICB9LCBfZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChkb2N1bWVudC5oZWFkLmNyZWF0ZVNoYWRvd1Jvb3QgfHwgZG9jdW1lbnQuaGVhZC5hdHRhY2hTaGFkb3cpIHtcbiAgICAgICAgICAgIHZhciBJbnB1dG1hc2tFbGVtZW50ID0gZnVuY3Rpb24oX0hUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gSW5wdXRtYXNrRWxlbWVudCgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzO1xuICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSW5wdXRtYXNrRWxlbWVudCksIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKElucHV0bWFza0VsZW1lbnQpLmNhbGwodGhpcykpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlTmFtZXMgPSBfdGhpcy5nZXRBdHRyaWJ1dGVOYW1lcygpLCBzaGFkb3cgPSBfdGhpcy5hdHRhY2hTaGFkb3coe1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogXCJjbG9zZWRcIlxuICAgICAgICAgICAgICAgICAgICB9KSwgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGF0dHIgaW4gaW5wdXQudHlwZSA9IFwidGV4dFwiLCBzaGFkb3cuYXBwZW5kQ2hpbGQoaW5wdXQpLCBhdHRyaWJ1dGVOYW1lcykgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGF0dHJpYnV0ZU5hbWVzLCBhdHRyKSAmJiBpbnB1dC5zZXRBdHRyaWJ1dGUoXCJkYXRhLWlucHV0bWFzay1cIiArIGF0dHJpYnV0ZU5hbWVzW2F0dHJdLCBfdGhpcy5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZXNbYXR0cl0pKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfaW5wdXRtYXNrLmRlZmF1bHQoKS5tYXNrKGlucHV0KSwgaW5wdXQuaW5wdXRtYXNrLnNoYWRvd1Jvb3QgPSBzaGFkb3csIFxuICAgICAgICAgICAgICAgICAgICBfdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9pbmhlcml0cyhJbnB1dG1hc2tFbGVtZW50LCBfSFRNTEVsZW1lbnQpLCBJbnB1dG1hc2tFbGVtZW50O1xuICAgICAgICAgICAgfShfd3JhcE5hdGl2ZVN1cGVyKEhUTUxFbGVtZW50KSk7XG4gICAgICAgICAgICBjdXN0b21FbGVtZW50cy5kZWZpbmUoXCJpbnB1dC1tYXNrXCIsIElucHV0bWFza0VsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfSwgZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgICAgICAgICAgfSA6IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICAgICAgICAgIH0sIF90eXBlb2Yob2JqKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMyksIElucHV0bWFzayA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG4gICAgICAgIHZvaWQgMCA9PT0gJC5mbi5pbnB1dG1hc2sgJiYgKCQuZm4uaW5wdXRtYXNrID0gZnVuY3Rpb24oZm4sIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHZhciBucHRtYXNrLCBpbnB1dCA9IHRoaXNbMF07XG4gICAgICAgICAgICBpZiAodm9pZCAwID09PSBvcHRpb25zICYmIChvcHRpb25zID0ge30pLCBcInN0cmluZ1wiID09IHR5cGVvZiBmbikgc3dpdGNoIChmbikge1xuICAgICAgICAgICAgICBjYXNlIFwidW5tYXNrZWR2YWx1ZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dCAmJiBpbnB1dC5pbnB1dG1hc2sgPyBpbnB1dC5pbnB1dG1hc2sudW5tYXNrZWR2YWx1ZSgpIDogJChpbnB1dCkudmFsKCk7XG5cbiAgICAgICAgICAgICAgY2FzZSBcInJlbW92ZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRtYXNrICYmIHRoaXMuaW5wdXRtYXNrLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGNhc2UgXCJnZXRlbXB0eW1hc2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQgJiYgaW5wdXQuaW5wdXRtYXNrID8gaW5wdXQuaW5wdXRtYXNrLmdldGVtcHR5bWFzaygpIDogXCJcIjtcblxuICAgICAgICAgICAgICBjYXNlIFwiaGFzTWFza2VkVmFsdWVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gISghaW5wdXQgfHwgIWlucHV0LmlucHV0bWFzaykgJiYgaW5wdXQuaW5wdXRtYXNrLmhhc01hc2tlZFZhbHVlKCk7XG5cbiAgICAgICAgICAgICAgY2FzZSBcImlzQ29tcGxldGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gIWlucHV0IHx8ICFpbnB1dC5pbnB1dG1hc2sgfHwgaW5wdXQuaW5wdXRtYXNrLmlzQ29tcGxldGUoKTtcblxuICAgICAgICAgICAgICBjYXNlIFwiZ2V0bWV0YWRhdGFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQgJiYgaW5wdXQuaW5wdXRtYXNrID8gaW5wdXQuaW5wdXRtYXNrLmdldG1ldGFkYXRhKCkgOiB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgY2FzZSBcInNldHZhbHVlXCI6XG4gICAgICAgICAgICAgICAgSW5wdXRtYXNrLnNldFZhbHVlKGlucHV0LCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIFwib3B0aW9uXCI6XG4gICAgICAgICAgICAgICAgaWYgKFwic3RyaW5nXCIgIT0gdHlwZW9mIG9wdGlvbnMpIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IHRoaXMuaW5wdXRtYXNrKSByZXR1cm4gdGhpcy5pbnB1dG1hc2sub3B0aW9uKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmJiB2b2lkIDAgIT09IGlucHV0LmlucHV0bWFzaykgcmV0dXJuIGlucHV0LmlucHV0bWFzay5vcHRpb24ob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5hbGlhcyA9IGZuLCBucHRtYXNrID0gbmV3IElucHV0bWFzayhvcHRpb25zKSwgdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBucHRtYXNrLm1hc2sodGhpcyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZuKSkgcmV0dXJuIG9wdGlvbnMuYWxpYXMgPSBmbiwgbnB0bWFzayA9IG5ldyBJbnB1dG1hc2sob3B0aW9ucyksIFxuICAgICAgICAgICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgbnB0bWFzay5tYXNrKHRoaXMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChcIm9iamVjdFwiID09IF90eXBlb2YoZm4pKSByZXR1cm4gbnB0bWFzayA9IG5ldyBJbnB1dG1hc2soZm4pLCB2b2lkIDAgPT09IGZuLm1hc2sgJiYgdm9pZCAwID09PSBmbi5hbGlhcyA/IHRoaXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gdGhpcy5pbnB1dG1hc2spIHJldHVybiB0aGlzLmlucHV0bWFzay5vcHRpb24oZm4pO1xuICAgICAgICAgICAgICAgICAgICBucHRtYXNrLm1hc2sodGhpcyk7XG4gICAgICAgICAgICAgICAgfSkgOiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIG5wdG1hc2subWFzayh0aGlzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodm9pZCAwID09PSBmbikgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgbnB0bWFzayA9IG5ldyBJbnB1dG1hc2sob3B0aW9ucyksIG5wdG1hc2subWFzayh0aGlzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICB2YXIgaW0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpLCBqUXVlcnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuICAgICAgICBpbS5kZXBlbmRlbmN5TGliID09PSBqUXVlcnkgJiYgX193ZWJwYWNrX3JlcXVpcmVfXygxMiksIG1vZHVsZS5leHBvcnRzID0gaW07XG4gICAgfSBdLCBpbnN0YWxsZWRNb2R1bGVzID0ge30sIF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXMsIF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXMsIFxuICAgIF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuICAgICAgICBfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkgfHwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgICAgICAgZ2V0OiBnZXR0ZXJcbiAgICAgICAgfSk7XG4gICAgfSwgX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuICAgICAgICBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgU3ltYm9sLnRvU3RyaW5nVGFnICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcbiAgICAgICAgICAgIHZhbHVlOiBcIk1vZHVsZVwiXG4gICAgICAgIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgIHZhbHVlOiAhMFxuICAgICAgICB9KTtcbiAgICB9LCBfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuICAgICAgICBpZiAoMSAmIG1vZGUgJiYgKHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSkpLCA4ICYgbW9kZSkgcmV0dXJuIHZhbHVlO1xuICAgICAgICBpZiAoNCAmIG1vZGUgJiYgXCJvYmplY3RcIiA9PSB0eXBlb2YgdmFsdWUgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBpZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCBcImRlZmF1bHRcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfSksIDIgJiBtb2RlICYmIFwic3RyaW5nXCIgIT0gdHlwZW9mIHZhbHVlKSBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZVtrZXldO1xuICAgICAgICB9LmJpbmQobnVsbCwga2V5KSk7XG4gICAgICAgIHJldHVybiBucztcbiAgICB9LCBfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiAgICAgICAgdmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/IGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9kdWxlLmRlZmF1bHQ7XG4gICAgICAgIH0gOiBmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkge1xuICAgICAgICAgICAgcmV0dXJuIG1vZHVsZTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIFwiYVwiLCBnZXR0ZXIpLCBnZXR0ZXI7XG4gICAgfSwgX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpO1xuICAgIH0sIF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCIsIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTMpO1xuICAgIGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbiAgICAgICAgaWYgKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSByZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiAgICAgICAgdmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuICAgICAgICAgICAgaTogbW9kdWxlSWQsXG4gICAgICAgICAgICBsOiAhMSxcbiAgICAgICAgICAgIGV4cG9ydHM6IHt9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSwgXG4gICAgICAgIG1vZHVsZS5sID0gITAsIG1vZHVsZS5leHBvcnRzO1xuICAgIH1cbiAgICB2YXIgbW9kdWxlcywgaW5zdGFsbGVkTW9kdWxlcztcbn0pOyJdfQ== diff --git a/reepay-woocommerce-payment.php b/reepay-woocommerce-payment.php index 9f06dfaf..c5114e5d 100755 --- a/reepay-woocommerce-payment.php +++ b/reepay-woocommerce-payment.php @@ -3,7 +3,7 @@ * Plugin Name: WooCommerce Reepay Checkout Gateway * Description: Provides a Payment Gateway through Reepay for WooCommerce. * Author: AAIT - * Version: 1.2.1 + * Version: 1.2.2 * Text Domain: woocommerce-gateway-reepay-checkout * Domain Path: /languages * WC requires at least: 3.0.0