UNPKG

nomadex-client

Version:

Client library to programmatically interact with https://voi.nomadex.app

207 lines 93.4 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.SmartAssetClient = exports.SmartAssetCallFactory = exports.APP_SPEC = void 0; /* eslint-disable */ // @ts-nocheck /** * This file was automatically generated by @algorandfoundation/algokit-client-generator. * DO NOT MODIFY IT BY HAND. * requires: @algorandfoundation/algokit-utils: ^2 */ const algokit = __importStar(require("@algorandfoundation/algokit-utils")); const algosdk_1 = require("algosdk"); exports.APP_SPEC = { "hints": { "arc200_name()byte[32]": { "call_config": { "no_op": "CALL" } }, "arc200_symbol()byte[8]": { "call_config": { "no_op": "CALL" } }, "arc200_decimals()uint8": { "call_config": { "no_op": "CALL" } }, "arc200_totalSupply()uint256": { "call_config": { "no_op": "CALL" } }, "arc200_balanceOf(address)uint256": { "call_config": { "no_op": "CALL" } }, "arc200_allowance(address,address)uint256": { "call_config": { "no_op": "CALL" } }, "arc200_transfer(address,uint256)bool": { "call_config": { "no_op": "CALL" } }, "arc200_approve(address,uint256)bool": { "call_config": { "no_op": "CALL" } }, "arc200_transferFrom(address,address,uint256)bool": { "call_config": { "no_op": "CALL" } }, "supportsInterface(byte[4])bool": { "call_config": { "no_op": "CALL" } }, "zeroAddress()address": { "call_config": { "no_op": "CALL" } }, "hasBox(address,address)bool": { "call_config": { "no_op": "CALL" } }, "createBalanceBox(address)bool": { "call_config": { "no_op": "CALL" } }, "createAllowanceBox(address,address)bool": { "call_config": { "no_op": "CALL" } }, "noop(uint64)void": { "call_config": { "no_op": "CALL" } }, "updateApplication()void": { "call_config": { "update_application": "CALL" } }, "deleteApplication()void": { "call_config": { "delete_application": "CALL" } }, "manager()address": { "call_config": { "no_op": "CALL" } }, "grant(address)void": { "call_config": { "no_op": "CALL" } }, "createApplication(address,byte[32],byte[8],uint8,uint256)void": { "call_config": { "no_op": "CREATE" } }, "bootstrap(pay)void": { "call_config": { "no_op": "CALL" } } }, "bare_call_config": { "no_op": "NEVER", "opt_in": "NEVER", "close_out": "NEVER", "update_application": "NEVER", "delete_application": "NEVER" }, "schema": { "local": { "declared": {}, "reserved": {} }, "global": { "declared": { "name": { "type": "bytes", "key": "name" }, "symbol": { "type": "bytes", "key": "symbol" }, "decimals": { "type": "bytes", "key": "decimals" }, "totalSupply": { "type": "bytes", "key": "total_supply" }, "initialized": { "type": "bytes", "key": "initialized" }, "warden": { "type": "bytes", "key": "warden" } }, "reserved": {} } }, "state": { "global": { "num_byte_slices": 6, "num_uints": 0 }, "local": { "num_byte_slices": 0, "num_uints": 0 } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjEwMi4wCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbGdvcmFuZGZvdW5kYXRpb24vVEVBTFNjcmlwdAoKLy8gVGhpcyBjb250cmFjdCBpcyBjb21wbGlhbnQgd2l0aCBhbmQvb3IgaW1wbGVtZW50cyB0aGUgZm9sbG93aW5nIEFSQ3M6IFsgQVJDNCBdCgovLyBUaGUgZm9sbG93aW5nIHRlbiBsaW5lcyBvZiBURUFMIGhhbmRsZSBpbml0aWFsIHByb2dyYW0gZmxvdwovLyBUaGlzIHBhdHRlcm4gaXMgdXNlZCB0byBtYWtlIGl0IGVhc3kgZm9yIGFueW9uZSB0byBwYXJzZSB0aGUgc3RhcnQgb2YgdGhlIHByb2dyYW0gYW5kIGRldGVybWluZSBpZiBhIHNwZWNpZmljIGFjdGlvbiBpcyBhbGxvd2VkCi8vIEhlcmUsIGFjdGlvbiByZWZlcnMgdG8gdGhlIE9uQ29tcGxldGUgaW4gY29tYmluYXRpb24gd2l0aCB3aGV0aGVyIHRoZSBhcHAgaXMgYmVpbmcgY3JlYXRlZCBvciBjYWxsZWQKLy8gRXZlcnkgcG9zc2libGUgYWN0aW9uIGZvciB0aGlzIGNvbnRyYWN0IGlzIHJlcHJlc2VudGVkIGluIHRoZSBzd2l0Y2ggc3RhdGVtZW50Ci8vIElmIHRoZSBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBjb250cmFjdCwgaXRzIHJlc3BlY3RpdmUgYnJhbmNoIHdpbGwgYmUgIipOT1RfSU1QTEVNRU5URUQiIHdoaWNoIGp1c3QgY29udGFpbnMgImVyciIKdHhuIEFwcGxpY2F0aW9uSUQKIQppbnQgNgoqCnR4biBPbkNvbXBsZXRpb24KKwpzd2l0Y2ggKmNhbGxfTm9PcCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY2FsbF9VcGRhdGVBcHBsaWNhdGlvbiAqY2FsbF9EZWxldGVBcHBsaWNhdGlvbiAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGFyYzIwMF9uYW1lKClieXRlWzMyXQoqYWJpX3JvdXRlX2FyYzIwMF9uYW1lOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIGFyYzIwMF9uYW1lKClieXRlWzMyXQoJY2FsbHN1YiBhcmMyMDBfbmFtZQoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzIwMF9uYW1lKCk6IFN0YXRpY0J5dGVzPDMyPgphcmMyMDBfbmFtZToKCXByb3RvIDAgMQoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjI0CgkvLyByZXR1cm4gdGhpcy5uYW1lLnZhbHVlOwoJYnl0ZSAweDZlNjE2ZDY1IC8vICJuYW1lIgoJYXBwX2dsb2JhbF9nZXQKCXJldHN1YgoKLy8gYXJjMjAwX3N5bWJvbCgpYnl0ZVs4XQoqYWJpX3JvdXRlX2FyYzIwMF9zeW1ib2w6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgYXJjMjAwX3N5bWJvbCgpYnl0ZVs4XQoJY2FsbHN1YiBhcmMyMDBfc3ltYm9sCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjMjAwX3N5bWJvbCgpOiBTdGF0aWNCeXRlczw4PgphcmMyMDBfc3ltYm9sOgoJcHJvdG8gMCAxCgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6MjkKCS8vIHJldHVybiB0aGlzLnN5bWJvbC52YWx1ZTsKCWJ5dGUgMHg3Mzc5NmQ2MjZmNmMgLy8gInN5bWJvbCIKCWFwcF9nbG9iYWxfZ2V0CglyZXRzdWIKCi8vIGFyYzIwMF9kZWNpbWFscygpdWludDgKKmFiaV9yb3V0ZV9hcmMyMDBfZGVjaW1hbHM6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgYXJjMjAwX2RlY2ltYWxzKCl1aW50OAoJY2FsbHN1YiBhcmMyMDBfZGVjaW1hbHMKCWl0b2IKCWR1cAoJYml0bGVuCglpbnQgOAoJPD0KCgkvLyBhcmMyMDBfZGVjaW1hbHMgcmV0dXJuIHZhbHVlIG92ZXJmbG93ZWQgOCBiaXRzCglhc3NlcnQKCWV4dHJhY3QgNyAxCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjMjAwX2RlY2ltYWxzKCk6IHVpbnQ4CmFyYzIwMF9kZWNpbWFsczoKCXByb3RvIDAgMQoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjM0CgkvLyByZXR1cm4gdGhpcy5kZWNpbWFscy52YWx1ZTsKCWJ5dGUgMHg2NDY1NjM2OTZkNjE2YzczIC8vICJkZWNpbWFscyIKCWFwcF9nbG9iYWxfZ2V0CglidG9pCglyZXRzdWIKCi8vIGFyYzIwMF90b3RhbFN1cHBseSgpdWludDI1NgoqYWJpX3JvdXRlX2FyYzIwMF90b3RhbFN1cHBseToKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSBhcmMyMDBfdG90YWxTdXBwbHkoKXVpbnQyNTYKCWNhbGxzdWIgYXJjMjAwX3RvdGFsU3VwcGx5CglkdXAKCWJpdGxlbgoJaW50IDI1NgoJPD0KCgkvLyBhcmMyMDBfdG90YWxTdXBwbHkgcmV0dXJuIHZhbHVlIG92ZXJmbG93ZWQgMjU2IGJpdHMKCWFzc2VydAoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglkdXAKCWxlbgoJZHVwCglpbnQgMzIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmMyMDBfdG90YWxTdXBwbHkoKTogdWludDI1NgphcmMyMDBfdG90YWxTdXBwbHk6Cglwcm90byAwIDEKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czozOQoJLy8gcmV0dXJuIHRoaXMudG90YWxTdXBwbHkudmFsdWU7CglieXRlIDB4NzQ2Zjc0NjE2YzVmNzM3NTcwNzA2Yzc5IC8vICJ0b3RhbF9zdXBwbHkiCglhcHBfZ2xvYmFsX2dldAoJcmV0c3ViCgovLyBhcmMyMDBfYmFsYW5jZU9mKGFkZHJlc3MpdWludDI1NgoqYWJpX3JvdXRlX2FyYzIwMF9iYWxhbmNlT2Y6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIG93bmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKG93bmVyKSBmb3IgYXJjMjAwX2JhbGFuY2VPZiBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmMyMDBfYmFsYW5jZU9mKGFkZHJlc3MpdWludDI1NgoJY2FsbHN1YiBhcmMyMDBfYmFsYW5jZU9mCglkdXAKCWJpdGxlbgoJaW50IDI1NgoJPD0KCgkvLyBhcmMyMDBfYmFsYW5jZU9mIHJldHVybiB2YWx1ZSBvdmVyZmxvd2VkIDI1NiBiaXRzCglhc3NlcnQKCWJ5dGUgMHhGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCgliJgoJZHVwCglsZW4KCWR1cAoJaW50IDMyCgktCglzd2FwCglzdWJzdHJpbmczCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjMjAwX2JhbGFuY2VPZihvd25lcjogQWRkcmVzcyk6IHVpbnQyNTYKYXJjMjAwX2JhbGFuY2VPZjoKCXByb3RvIDEgMQoKCS8vICppZjBfY29uZGl0aW9uCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czo0NAoJLy8gdGhpcy5iYWxhbmNlcyhvd25lcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjQ1CgkvLyByZXR1cm4gdGhpcy5iYWxhbmNlcyhvd25lcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWJveF9nZXQKCgkvLyBib3ggdmFsdWUgZG9lcyBub3QgZXhpc3Q6IHRoaXMuYmFsYW5jZXMob3duZXIpLnZhbHVlCglhc3NlcnQKCXJldHN1YgoKKmlmMF9lbmQ6CgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czo0NwoJLy8gcmV0dXJuIDx1aW50MjU2PjA7CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAoJcmV0c3ViCgovLyBhcmMyMDBfYWxsb3dhbmNlKGFkZHJlc3MsYWRkcmVzcyl1aW50MjU2CiphYmlfcm91dGVfYXJjMjAwX2FsbG93YW5jZToKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gc3BlbmRlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCAwIChzcGVuZGVyKSBmb3IgYXJjMjAwX2FsbG93YW5jZSBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gb3duZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMSAob3duZXIpIGZvciBhcmMyMDBfYWxsb3dhbmNlIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzIwMF9hbGxvd2FuY2UoYWRkcmVzcyxhZGRyZXNzKXVpbnQyNTYKCWNhbGxzdWIgYXJjMjAwX2FsbG93YW5jZQoJZHVwCgliaXRsZW4KCWludCAyNTYKCTw9CgoJLy8gYXJjMjAwX2FsbG93YW5jZSByZXR1cm4gdmFsdWUgb3ZlcmZsb3dlZCAyNTYgYml0cwoJYXNzZXJ0CglieXRlIDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRgoJYiYKCWR1cAoJbGVuCglkdXAKCWludCAzMgoJLQoJc3dhcAoJc3Vic3RyaW5nMwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzIwMF9hbGxvd2FuY2Uob3duZXI6IEFkZHJlc3MsIHNwZW5kZXI6IEFkZHJlc3MpOiB1aW50MjU2CmFyYzIwMF9hbGxvd2FuY2U6Cglwcm90byAyIDEKCgkvLyAqaWYxX2NvbmRpdGlvbgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NTIKCS8vIHRoaXMuYWxsb3dhbmNlcyhbb3duZXIsIHNwZW5kZXJdKS5leGlzdHMKCWZyYW1lX2RpZyAtMSAvLyBvd25lcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIHNwZW5kZXI6IEFkZHJlc3MKCWNvbmNhdAoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqaWYxX2VuZAoKCS8vICppZjFfY29uc2VxdWVudAoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NTMKCS8vIHJldHVybiB0aGlzLmFsbG93YW5jZXMoW293bmVyLCBzcGVuZGVyXSkudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBzcGVuZGVyOiBBZGRyZXNzCgljb25jYXQKCWJveF9nZXQKCgkvLyBib3ggdmFsdWUgZG9lcyBub3QgZXhpc3Q6IHRoaXMuYWxsb3dhbmNlcyhbb3duZXIsIHNwZW5kZXJdKS52YWx1ZQoJYXNzZXJ0CglyZXRzdWIKCippZjFfZW5kOgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NTUKCS8vIHJldHVybiA8dWludDI1Nj4wOwoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKCXJldHN1YgoKLy8gdHJhbnNmZXIoZnJvbTogQWRkcmVzcywgdG86IEFkZHJlc3MsIHZhbHVlOiB1aW50MjU2KTogYm9vbGVhbgp0cmFuc2ZlcjoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjYzCgkvLyAhdGhpcy5iYWxhbmNlcyhmcm9tKS5leGlzdHMgJiYgZnJvbS5iYWxhbmNlID49IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIC0xIC8vIGZyb206IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJZHVwCglieiAqc2tpcF9hbmQwCglmcmFtZV9kaWcgLTEgLy8gZnJvbTogQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWdsb2JhbCBNaW5CYWxhbmNlCgk+PQoJJiYKCipza2lwX2FuZDA6CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NjQKCS8vIHRoaXMuYmFsYW5jZXMoZnJvbSkudmFsdWUgPSA8dWludDI1Nj4wCglmcmFtZV9kaWcgLTEgLy8gZnJvbTogQWRkcmVzcwoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKCWJveF9wdXQKCippZjJfZW5kOgoJLy8gKmlmM19jb25kaXRpb24KCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjY2CgkvLyAhdGhpcy5iYWxhbmNlcyh0bykuZXhpc3RzICYmIHRvLmJhbGFuY2UgPj0gZ2xvYmFscy5taW5CYWxhbmNlCglmcmFtZV9kaWcgLTIgLy8gdG86IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJZHVwCglieiAqc2tpcF9hbmQxCglmcmFtZV9kaWcgLTIgLy8gdG86IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglnbG9iYWwgTWluQmFsYW5jZQoJPj0KCSYmCgoqc2tpcF9hbmQxOgoJYnogKmlmM19lbmQKCgkvLyAqaWYzX2NvbnNlcXVlbnQKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjY3CgkvLyB0aGlzLmJhbGFuY2VzKHRvKS52YWx1ZSA9IDx1aW50MjU2PjAKCWZyYW1lX2RpZyAtMiAvLyB0bzogQWRkcmVzcwoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKCWJveF9wdXQKCippZjNfZW5kOgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NzAKCS8vIGFzc2VydCh0aGlzLmJhbGFuY2VzKGZyb20pLmV4aXN0cywgTk9UX0VOT1VHSF9CQUxBTkNFKQoJZnJhbWVfZGlnIC0xIC8vIGZyb206IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoKCS8vIG5vdCBlbm91Z2ggYmFsYW5jZQoJYXNzZXJ0CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NzEKCS8vIGFzc2VydCh0aGlzLmJhbGFuY2VzKHRvKS5leGlzdHMsIEVNUFRZX1dBTExFVCkKCWZyYW1lX2RpZyAtMiAvLyB0bzogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCgoJLy8gZW1wdHkgd2FsbGV0LCBtdXN0IGhvbGQgbWluQmFsYW5jZQoJYXNzZXJ0CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NzMKCS8vIHNlbmRlckJhbGFuY2UgPSB0aGlzLmJhbGFuY2VzKGZyb20pLnZhbHVlCglmcmFtZV9kaWcgLTEgLy8gZnJvbTogQWRkcmVzcwoJYm94X2dldAoKCS8vIGJveCB2YWx1ZSBkb2VzIG5vdCBleGlzdDogdGhpcy5iYWxhbmNlcyhmcm9tKS52YWx1ZQoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gc2VuZGVyQmFsYW5jZTogdWludDI1NgoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjc0CgkvLyBhc3NlcnQoc2VuZGVyQmFsYW5jZSA+PSB2YWx1ZSwgTk9UX0VOT1VHSF9CQUxBTkNFKQoJZnJhbWVfZGlnIDAgLy8gc2VuZGVyQmFsYW5jZTogdWludDI1NgoJZnJhbWVfZGlnIC0zIC8vIHZhbHVlOiB1aW50MjU2CgliPj0KCgkvLyBub3QgZW5vdWdoIGJhbGFuY2UKCWFzc2VydAoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjc2CgkvLyB0aGlzLmJhbGFuY2VzKGZyb20pLnZhbHVlID0gc2VuZGVyQmFsYW5jZSAtIHZhbHVlCglmcmFtZV9kaWcgLTEgLy8gZnJvbTogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gc2VuZGVyQmFsYW5jZTogdWludDI1NgoJZnJhbWVfZGlnIC0zIC8vIHZhbHVlOiB1aW50MjU2CgliLQoJZHVwCgliaXRsZW4KCWludCAyNTYKCTw9CgoJLy8gc2VuZGVyQmFsYW5jZSAtIHZhbHVlIG92ZXJmbG93ZWQgMjU2IGJpdHMKCWFzc2VydAoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglkdXAKCWxlbgoJZHVwCglpbnQgMzIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWJveF9wdXQKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czo3NwoJLy8gdGhpcy5iYWxhbmNlcyh0bykudmFsdWUgPSB0aGlzLmJhbGFuY2VzKHRvKS52YWx1ZSArIHZhbHVlCglmcmFtZV9kaWcgLTIgLy8gdG86IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyB0bzogQWRkcmVzcwoJYm94X2dldAoKCS8vIGJveCB2YWx1ZSBkb2VzIG5vdCBleGlzdDogdGhpcy5iYWxhbmNlcyh0bykudmFsdWUKCWFzc2VydAoJZnJhbWVfZGlnIC0zIC8vIHZhbHVlOiB1aW50MjU2CgliKwoJZHVwCgliaXRsZW4KCWludCAyNTYKCTw9CgoJLy8gdGhpcy5iYWxhbmNlcyh0bykudmFsdWUgKyB2YWx1ZSBvdmVyZmxvd2VkIDI1NiBiaXRzCglhc3NlcnQKCWJ5dGUgMHhGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCgliJgoJZHVwCglsZW4KCWR1cAoJaW50IDMyCgktCglzd2FwCglzdWJzdHJpbmczCglib3hfcHV0CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NzkKCS8vIHRoaXMuYXJjMjAwX1RyYW5zZmVyLmxvZyh7IGZyb206IGZyb20sIHRvOiB0bywgdmFsdWU6IHZhbHVlIH0pCglieXRlIDB4Nzk4M2MzNWMgLy8gYXJjMjAwX1RyYW5zZmVyKGFkZHJlc3MsYWRkcmVzcyx1aW50MjU2KQoJZnJhbWVfZGlnIC0xIC8vIGZyb206IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyB0bzogQWRkcmVzcwoJY29uY2F0CglmcmFtZV9kaWcgLTMgLy8gdmFsdWU6IHVpbnQyNTYKCWNvbmNhdAoJY29uY2F0Cglsb2cKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czo4MQoJLy8gcmV0dXJuIHRydWU7CglpbnQgMQoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmMyMDBfdHJhbnNmZXIoYWRkcmVzcyx1aW50MjU2KWJvb2wKKmFiaV9yb3V0ZV9hcmMyMDBfdHJhbnNmZXI6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHZhbHVlOiB1aW50MjU2Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKHZhbHVlKSBmb3IgYXJjMjAwX3RyYW5zZmVyIG11c3QgYmUgYSB1aW50MjU2Cglhc3NlcnQKCgkvLyB0bzogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCAxICh0bykgZm9yIGFyYzIwMF90cmFuc2ZlciBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmMyMDBfdHJhbnNmZXIoYWRkcmVzcyx1aW50MjU2KWJvb2wKCWNhbGxzdWIgYXJjMjAwX3RyYW5zZmVyCglieXRlIDB4MDAKCWludCAwCgl1bmNvdmVyIDIKCXNldGJpdAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzIwMF90cmFuc2Zlcih0bzogQWRkcmVzcywgdmFsdWU6IHVpbnQyNTYpOiBib29sZWFuCmFyYzIwMF90cmFuc2ZlcjoKCXByb3RvIDIgMQoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjg1CgkvLyByZXR1cm4gdGhpcy50cmFuc2Zlcih0aGlzLnR4bi5zZW5kZXIsIHRvLCB2YWx1ZSk7CglmcmFtZV9kaWcgLTIgLy8gdmFsdWU6IHVpbnQyNTYKCWZyYW1lX2RpZyAtMSAvLyB0bzogQWRkcmVzcwoJdHhuIFNlbmRlcgoJY2FsbHN1YiB0cmFuc2ZlcgoJcmV0c3ViCgovLyBhcHByb3ZlKG93bmVyOiBBZGRyZXNzLCBzcGVuZGVyOiBBZGRyZXNzLCB2YWx1ZTogdWludDI1Nik6IGJvb2xlYW4KYXBwcm92ZToKCXByb3RvIDMgMQoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjg5CgkvLyBhc3NlcnQodGhpcy5hbGxvd2FuY2VzKFtvd25lciwgc3BlbmRlcl0pLmV4aXN0cyB8fCBzcGVuZGVyLmJhbGFuY2UgPj0gZ2xvYmFscy5taW5CYWxhbmNlLCBFTVBUWV9XQUxMRVQpCglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBzcGVuZGVyOiBBZGRyZXNzCgljb25jYXQKCWJveF9sZW4KCXN3YXAKCXBvcAoJZHVwCglibnogKnNraXBfb3IwCglmcmFtZV9kaWcgLTIgLy8gc3BlbmRlcjogQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWdsb2JhbCBNaW5CYWxhbmNlCgk+PQoJfHwKCipza2lwX29yMDoKCS8vIGVtcHR5IHdhbGxldCwgbXVzdCBob2xkIG1pbkJhbGFuY2UKCWFzc2VydAoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjkxCgkvLyB0aGlzLmFsbG93YW5jZXMoW293bmVyLCBzcGVuZGVyXSkudmFsdWUgPSB2YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIG93bmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gc3BlbmRlcjogQWRkcmVzcwoJY29uY2F0CglmcmFtZV9kaWcgLTMgLy8gdmFsdWU6IHVpbnQyNTYKCWJveF9wdXQKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czo5MgoJLy8gdGhpcy5hcmMyMDBfQXBwcm92YWwubG9nKHsgb3duZXI6IG93bmVyLCBzcGVuZGVyOiBzcGVuZGVyLCB2YWx1ZTogdmFsdWUgfSkKCWJ5dGUgMHgxOTY5Zjg2NSAvLyBhcmMyMDBfQXBwcm92YWwoYWRkcmVzcyxhZGRyZXNzLHVpbnQyNTYpCglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBzcGVuZGVyOiBBZGRyZXNzCgljb25jYXQKCWZyYW1lX2RpZyAtMyAvLyB2YWx1ZTogdWludDI1NgoJY29uY2F0Cgljb25jYXQKCWxvZwoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjk0CgkvLyByZXR1cm4gdHJ1ZTsKCWludCAxCglyZXRzdWIKCi8vIGFyYzIwMF9hcHByb3ZlKGFkZHJlc3MsdWludDI1Nilib29sCiphYmlfcm91dGVfYXJjMjAwX2FwcHJvdmU6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHZhbHVlOiB1aW50MjU2Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKHZhbHVlKSBmb3IgYXJjMjAwX2FwcHJvdmUgbXVzdCBiZSBhIHVpbnQyNTYKCWFzc2VydAoKCS8vIHNwZW5kZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMSAoc3BlbmRlcikgZm9yIGFyYzIwMF9hcHByb3ZlIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzIwMF9hcHByb3ZlKGFkZHJlc3MsdWludDI1Nilib29sCgljYWxsc3ViIGFyYzIwMF9hcHByb3ZlCglieXRlIDB4MDAKCWludCAwCgl1bmNvdmVyIDIKCXNldGJpdAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzIwMF9hcHByb3ZlKHNwZW5kZXI6IEFkZHJlc3MsIHZhbHVlOiB1aW50MjU2KTogYm9vbGVhbgphcmMyMDBfYXBwcm92ZToKCXByb3RvIDIgMQoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjk4CgkvLyByZXR1cm4gdGhpcy5hcHByb3ZlKHRoaXMudHhuLnNlbmRlciwgc3BlbmRlciwgdmFsdWUpOwoJZnJhbWVfZGlnIC0yIC8vIHZhbHVlOiB1aW50MjU2CglmcmFtZV9kaWcgLTEgLy8gc3BlbmRlcjogQWRkcmVzcwoJdHhuIFNlbmRlcgoJY2FsbHN1YiBhcHByb3ZlCglyZXRzdWIKCi8vIGFyYzIwMF90cmFuc2ZlckZyb20oYWRkcmVzcyxhZGRyZXNzLHVpbnQyNTYpYm9vbAoqYWJpX3JvdXRlX2FyYzIwMF90cmFuc2ZlckZyb206CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHZhbHVlOiB1aW50MjU2Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKHZhbHVlKSBmb3IgYXJjMjAwX3RyYW5zZmVyRnJvbSBtdXN0IGJlIGEgdWludDI1NgoJYXNzZXJ0CgoJLy8gdG86IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMSAodG8pIGZvciBhcmMyMDBfdHJhbnNmZXJGcm9tIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBmcm9tOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDIgKGZyb20pIGZvciBhcmMyMDBfdHJhbnNmZXJGcm9tIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzIwMF90cmFuc2ZlckZyb20oYWRkcmVzcyxhZGRyZXNzLHVpbnQyNTYpYm9vbAoJY2FsbHN1YiBhcmMyMDBfdHJhbnNmZXJGcm9tCglieXRlIDB4MDAKCWludCAwCgl1bmNvdmVyIDIKCXNldGJpdAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzIwMF90cmFuc2ZlckZyb20oZnJvbTogQWRkcmVzcywgdG86IEFkZHJlc3MsIHZhbHVlOiB1aW50MjU2KTogYm9vbGVhbgphcmMyMDBfdHJhbnNmZXJGcm9tOgoJcHJvdG8gMyAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cAoKCS8vICppZjRfY29uZGl0aW9uCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxMDIKCS8vIHZhbHVlID09PSAwCglmcmFtZV9kaWcgLTMgLy8gdmFsdWU6IHVpbnQyNTYKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCgliPT0KCWJ6ICppZjRfZW5kCgoJLy8gKmlmNF9jb25zZXF1ZW50CgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxMDIKCS8vIHJldHVybiB0cnVlOwoJaW50IDEKCWIgKmFyYzIwMF90cmFuc2ZlckZyb20qcmV0dXJuCgoqaWY0X2VuZDoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjEwNAoJLy8gYWxsb3dhbmNlID0gdGhpcy5hcmMyMDBfYWxsb3dhbmNlKGZyb20sIHRoaXMudHhuLnNlbmRlcikKCXR4biBTZW5kZXIKCWZyYW1lX2RpZyAtMSAvLyBmcm9tOiBBZGRyZXNzCgljYWxsc3ViIGFyYzIwMF9hbGxvd2FuY2UKCWZyYW1lX2J1cnkgMCAvLyBhbGxvd2FuY2U6IHVuc2FmZSB1aW50MjU2CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6MTA1CgkvLyBhc3NlcnQoYWxsb3dhbmNlID49IHZhbHVlLCBBTExPV0FOQ0VfSU5TVUZGSUNJRU5UKQoJZnJhbWVfZGlnIDAgLy8gYWxsb3dhbmNlOiB1bnNhZmUgdWludDI1NgoJZnJhbWVfZGlnIC0zIC8vIHZhbHVlOiB1aW50MjU2CgliPj0KCgkvLyBjYW4ndCBzcGVuZCBtb3JlIHRoYW4gYWxsb3dlZAoJYXNzZXJ0CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6MTA3CgkvLyBvd25lckJhbGFuY2UgPSB0aGlzLmFyYzIwMF9iYWxhbmNlT2YoZnJvbSkKCWZyYW1lX2RpZyAtMSAvLyBmcm9tOiBBZGRyZXNzCgljYWxsc3ViIGFyYzIwMF9iYWxhbmNlT2YKCWZyYW1lX2J1cnkgMSAvLyBvd25lckJhbGFuY2U6IHVuc2FmZSB1aW50MjU2CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6MTA4CgkvLyBhc3NlcnQob3duZXJCYWxhbmNlID49IHZhbHVlLCBOT1RfRU5PVUdIX0JBTEFOQ0UpCglmcmFtZV9kaWcgMSAvLyBvd25lckJhbGFuY2U6IHVuc2FmZSB1aW50MjU2CglmcmFtZV9kaWcgLTMgLy8gdmFsdWU6IHVpbnQyNTYKCWI+PQoKCS8vIG5vdCBlbm91Z2ggYmFsYW5jZQoJYXNzZXJ0CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6MTEwCgkvLyB0aGlzLmFsbG93YW5jZXMoW2Zyb20sIHRoaXMudHhuLnNlbmRlcl0pLnZhbHVlID0gYWxsb3dhbmNlIC0gdmFsdWUKCWZyYW1lX2RpZyAtMSAvLyBmcm9tOiBBZGRyZXNzCgl0eG4gU2VuZGVyCgljb25jYXQKCWZyYW1lX2RpZyAwIC8vIGFsbG93YW5jZTogdW5zYWZlIHVpbnQyNTYKCWZyYW1lX2RpZyAtMyAvLyB2YWx1ZTogdWludDI1NgoJYi0KCWR1cAoJYml0bGVuCglpbnQgMjU2Cgk8PQoKCS8vIGFsbG93YW5jZSAtIHZhbHVlIG92ZXJmbG93ZWQgMjU2IGJpdHMKCWFzc2VydAoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglkdXAKCWxlbgoJZHVwCglpbnQgMzIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWJveF9wdXQKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxMTEKCS8vIHRoaXMuYmFsYW5jZXMoZnJvbSkudmFsdWUgPSBvd25lckJhbGFuY2UgLSB2YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIGZyb206IEFkZHJlc3MKCWZyYW1lX2RpZyAxIC8vIG93bmVyQmFsYW5jZTogdW5zYWZlIHVpbnQyNTYKCWZyYW1lX2RpZyAtMyAvLyB2YWx1ZTogdWludDI1NgoJYi0KCWR1cAoJYml0bGVuCglpbnQgMjU2Cgk8PQoKCS8vIG93bmVyQmFsYW5jZSAtIHZhbHVlIG92ZXJmbG93ZWQgMjU2IGJpdHMKCWFzc2VydAoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglkdXAKCWxlbgoJZHVwCglpbnQgMzIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWJveF9wdXQKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxMTIKCS8vIHRoaXMuYmFsYW5jZXModG8pLnZhbHVlID0gdGhpcy5hcmMyMDBfYmFsYW5jZU9mKHRvKSArIHZhbHVlCglmcmFtZV9kaWcgLTIgLy8gdG86IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyB0bzogQWRkcmVzcwoJY2FsbHN1YiBhcmMyMDBfYmFsYW5jZU9mCglmcmFtZV9kaWcgLTMgLy8gdmFsdWU6IHVpbnQyNTYKCWIrCglkdXAKCWJpdGxlbgoJaW50IDI1NgoJPD0KCgkvLyB0aGlzLmFyYzIwMF9iYWxhbmNlT2YodG8pICsgdmFsdWUgb3ZlcmZsb3dlZCAyNTYgYml0cwoJYXNzZXJ0CglieXRlIDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRgoJYiYKCWR1cAoJbGVuCglkdXAKCWludCAzMgoJLQoJc3dhcAoJc3Vic3RyaW5nMwoJYm94X3B1dAoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjExNAoJLy8gdGhpcy5hcmMyMDBfVHJhbnNmZXIubG9nKHsgZnJvbTogZnJvbSwgdG86IHRvLCB2YWx1ZTogdmFsdWUgfSkKCWJ5dGUgMHg3OTgzYzM1YyAvLyBhcmMyMDBfVHJhbnNmZXIoYWRkcmVzcyxhZGRyZXNzLHVpbnQyNTYpCglmcmFtZV9kaWcgLTEgLy8gZnJvbTogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIHRvOiBBZGRyZXNzCgljb25jYXQKCWZyYW1lX2RpZyAtMyAvLyB2YWx1ZTogdWludDI1NgoJY29uY2F0Cgljb25jYXQKCWxvZwoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjExNgoJLy8gcmV0dXJuIHRydWU7CglpbnQgMQoKKmFyYzIwMF90cmFuc2ZlckZyb20qcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMQoJcmV0c3ViCgovLyBzdXBwb3J0c0ludGVyZmFjZShieXRlWzRdKWJvb2wKKmFiaV9yb3V0ZV9zdXBwb3J0c0ludGVyZmFjZToKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gaW50ZXJmYWNlSUQ6IGJ5dGVbNF0KCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgNAoJPT0KCgkvLyBhcmd1bWVudCAwIChpbnRlcmZhY2VJRCkgZm9yIHN1cHBvcnRzSW50ZXJmYWNlIG11c3QgYmUgYSBieXRlWzRdCglhc3NlcnQKCgkvLyBleGVjdXRlIHN1cHBvcnRzSW50ZXJmYWNlKGJ5dGVbNF0pYm9vbAoJY2FsbHN1YiBzdXBwb3J0c0ludGVyZmFjZQoJYnl0ZSAweDAwCglpbnQgMAoJdW5jb3ZlciAyCglzZXRiaXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBzdXBwb3J0c0ludGVyZmFjZShpbnRlcmZhY2VJRDogU3RhdGljQXJyYXk8Ynl0ZSwgND4pOiBib29sZWFuCnN1cHBvcnRzSW50ZXJmYWNlOgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxMjEKCS8vIGlkID0gYnRvaShpbnRlcmZhY2VJRCkKCWZyYW1lX2RpZyAtMSAvLyBpbnRlcmZhY2VJRDogU3RhdGljQXJyYXk8Ynl0ZSwgND4KCWJ0b2kKCWZyYW1lX2J1cnkgMCAvLyBpZDogdWludDY0CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6MTIzCgkvLyByZXR1cm4gKAoJLy8gICAgICAgaWQgPT09IDB4NGUyMmEzYmEgfHwKCS8vICAgICAgIGlkID09PSAweGM3YmVhMDQwIHx8CgkvLyAgICAgICBpZCA9PT0gMHhkYTcwMjViOSB8fAoJLy8gICAgICAgaWQgPT09IDB4NGE5NjhmOGYgfHwKCS8vICAgICAgIGlkID09PSAweGI1NDIyMTI1IHx8CgkvLyAgICAgICBpZCA9PT0gMHg2NTdkMTNlYyB8fAoJLy8gICAgICAgaWQgPT09IDB4YjZhZTFhMjUgfHwKCS8vICAgICAgIGlkID09PSAweDg0ZWMxM2Q1IHx8CgkvLyAgICAgICBpZCA9PT0gMHhlYzk5NjA0MSB8fAoJLy8gICAgICAgaWQgPT09IDB4ODJlNTczYzQgfHwKCS8vICAgICAgIGlkID09PSAweGJiYjMxOWYzIHx8CgkvLyAgICAgICBpZCA9PT0gMHg3OTgzYzM1YyB8fAoJLy8gICAgICAgaWQgPT09IDB4MTk2OWY4NjUgfHwKCS8vICAgICAgIGlkID09PSAweGJjNGE1NDAwIHx8CgkvLyAgICAgICBpZCA9PT0gMHhjOThkZDA1NSB8fAoJLy8gICAgICAgaWQgPT09IDB4NjYzMDQyZmIKCS8vICAgICApOwoJZnJhbWVfZGlnIDAgLy8gaWQ6IHVpbnQ2NAoJaW50IDB4NGUyMmEzYmEKCT09CglkdXAKCWJueiAqc2tpcF9vcjEKCWZyYW1lX2RpZyAwIC8vIGlkOiB1aW50NjQKCWludCAweGM3YmVhMDQwCgk9PQoJfHwKCipza2lwX29yMToKCWR1cAoJYm56ICpza2lwX29yMgoJZnJhbWVfZGlnIDAgLy8gaWQ6IHVpbnQ2NAoJaW50IDB4ZGE3MDI1YjkKCT09Cgl8fAoKKnNraXBfb3IyOgoJZHVwCglibnogKnNraXBfb3IzCglmcmFtZV9kaWcgMCAvLyBpZDogdWludDY0CglpbnQgMHg0YTk2OGY4ZgoJPT0KCXx8Cgoqc2tpcF9vcjM6CglkdXAKCWJueiAqc2tpcF9vcjQKCWZyYW1lX2RpZyAwIC8vIGlkOiB1aW50NjQKCWludCAweGI1NDIyMTI1Cgk9PQoJfHwKCipza2lwX29yNDoKCWR1cAoJYm56ICpza2lwX29yNQoJZnJhbWVfZGlnIDAgLy8gaWQ6IHVpbnQ2NAoJaW50IDB4NjU3ZDEzZWMKCT09Cgl8fAoKKnNraXBfb3I1OgoJZHVwCglibnogKnNraXBfb3I2CglmcmFtZV9kaWcgMCAvLyBpZDogdWludDY0CglpbnQgMHhiNmFlMWEyNQoJPT0KCXx8Cgoqc2tpcF9vcjY6CglkdXAKCWJueiAqc2tpcF9vcjcKCWZyYW1lX2RpZyAwIC8vIGlkOiB1aW50NjQKCWludCAweDg0ZWMxM2Q1Cgk9PQoJfHwKCipza2lwX29yNzoKCWR1cAoJYm56ICpza2lwX29yOAoJZnJhbWVfZGlnIDAgLy8gaWQ6IHVpbnQ2NAoJaW50IDB4ZWM5OTYwNDEKCT09Cgl8fAoKKnNraXBfb3I4OgoJZHVwCglibnogKnNraXBfb3I5CglmcmFtZV9kaWcgMCAvLyBpZDogdWludDY0CglpbnQgMHg4MmU1NzNjNAoJPT0KCXx8Cgoqc2tpcF9vcjk6CglkdXAKCWJueiAqc2tpcF9vcjEwCglmcmFtZV9kaWcgMCAvLyBpZDogdWludDY0CglpbnQgMHhiYmIzMTlmMwoJPT0KCXx8Cgoqc2tpcF9vcjEwOgoJZHVwCglibnogKnNraXBfb3IxMQoJZnJhbWVfZGlnIDAgLy8gaWQ6IHVpbnQ2NAoJaW50IDB4Nzk4M2MzNWMKCT09Cgl8fAoKKnNraXBfb3IxMToKCWR1cAoJYm56ICpza2lwX29yMTIKCWZyYW1lX2RpZyAwIC8vIGlkOiB1aW50NjQKCWludCAweDE5NjlmODY1Cgk9PQoJfHwKCipza2lwX29yMTI6CglkdXAKCWJueiAqc2tpcF9vcjEzCglmcmFtZV9kaWcgMCAvLyBpZDogdWludDY0CglpbnQgMHhiYzRhNTQwMAoJPT0KCXx8Cgoqc2tpcF9vcjEzOgoJZHVwCglibnogKnNraXBfb3IxNAoJZnJhbWVfZGlnIDAgLy8gaWQ6IHVpbnQ2NAoJaW50IDB4Yzk4ZGQwNTUKCT09Cgl8fAoKKnNraXBfb3IxNDoKCWR1cAoJYm56ICpza2lwX29yMTUKCWZyYW1lX2RpZyAwIC8vIGlkOiB1aW50NjQKCWludCAweDY2MzA0MmZiCgk9PQoJfHwKCipza2lwX29yMTU6CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gemVyb0FkZHJlc3MoKWFkZHJlc3MKKmFiaV9yb3V0ZV96ZXJvQWRkcmVzczoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSB6ZXJvQWRkcmVzcygpYWRkcmVzcwoJY2FsbHN1YiB6ZXJvQWRkcmVzcwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIHplcm9BZGRyZXNzKCk6IEFkZHJlc3MKemVyb0FkZHJlc3M6Cglwcm90byAwIDEKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxNDUKCS8vIHJldHVybiBnbG9iYWxzLnplcm9BZGRyZXNzOwoJZ2xvYmFsIFplcm9BZGRyZXNzCglyZXRzdWIKCi8vIGhhc0JveChhZGRyZXNzLGFkZHJlc3MpYm9vbAoqYWJpX3JvdXRlX2hhc0JveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gc3BlbmRlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCAwIChzcGVuZGVyKSBmb3IgaGFzQm94IG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBvd25lcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCAxIChvd25lcikgZm9yIGhhc0JveCBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBoYXNCb3goYWRkcmVzcyxhZGRyZXNzKWJvb2wKCWNhbGxzdWIgaGFzQm94CglieXRlIDB4MDAKCWludCAwCgl1bmNvdmVyIDIKCXNldGJpdAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGhhc0JveChvd25lcjogQWRkcmVzcywgc3BlbmRlcjogQWRkcmVzcyk6IGJvb2xlYW4KaGFzQm94OgoJcHJvdG8gMiAxCgoJLy8gKmlmNV9jb25kaXRpb24KCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjE1MAoJLy8gc3BlbmRlciA9PT0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIHNwZW5kZXI6IEFkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJPT0KCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxNTEKCS8vIHJldHVybiB0aGlzLmJhbGFuY2VzKG93bmVyKS5leGlzdHM7CglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJcmV0c3ViCgoqaWY1X2VuZDoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjE1MwoJLy8gcmV0dXJuIHRoaXMuYWxsb3dhbmNlcyhbb3duZXIsIHNwZW5kZXJdKS5leGlzdHM7CglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBzcGVuZGVyOiBBZGRyZXNzCgljb25jYXQKCWJveF9sZW4KCXN3YXAKCXBvcAoJcmV0c3ViCgovLyBjcmVhdGVCYWxhbmNlQm94KGFkZHJlc3MpYm9vbAoqYWJpX3JvdXRlX2NyZWF0ZUJhbGFuY2VCb3g6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIG93bmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKG93bmVyKSBmb3IgY3JlYXRlQmFsYW5jZUJveCBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBjcmVhdGVCYWxhbmNlQm94KGFkZHJlc3MpYm9vbAoJY2FsbHN1YiBjcmVhdGVCYWxhbmNlQm94CglieXRlIDB4MDAKCWludCAwCgl1bmNvdmVyIDIKCXNldGJpdAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUJhbGFuY2VCb3gob3duZXI6IEFkZHJlc3MpOiBib29sZWFuCmNyZWF0ZUJhbGFuY2VCb3g6Cglwcm90byAxIDEKCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6MTU3CgkvLyAhdGhpcy5iYWxhbmNlcyhvd25lcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjE1OAoJLy8gdGhpcy5iYWxhbmNlcyhvd25lcikudmFsdWUgPSA8dWludDI1Nj4wCglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCglib3hfcHV0CgoqaWY2X2VuZDoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjE2MAoJLy8gcmV0dXJuIHRydWU7CglpbnQgMQoJcmV0c3ViCgovLyBjcmVhdGVBbGxvd2FuY2VCb3goYWRkcmVzcyxhZGRyZXNzKWJvb2wKKmFiaV9yb3V0ZV9jcmVhdGVBbGxvd2FuY2VCb3g6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHNwZW5kZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMCAoc3BlbmRlcikgZm9yIGNyZWF0ZUFsbG93YW5jZUJveCBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gb3duZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMSAob3duZXIpIGZvciBjcmVhdGVBbGxvd2FuY2VCb3ggbXVzdCBiZSBhIGFkZHJlc3MKCWFzc2VydAoKCS8vIGV4ZWN1dGUgY3JlYXRlQWxsb3dhbmNlQm94KGFkZHJlc3MsYWRkcmVzcylib29sCgljYWxsc3ViIGNyZWF0ZUFsbG93YW5jZUJveAoJYnl0ZSAweDAwCglpbnQgMAoJdW5jb3ZlciAyCglzZXRiaXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBjcmVhdGVBbGxvd2FuY2VCb3gob3duZXI6IEFkZHJlc3MsIHNwZW5kZXI6IEFkZHJlc3MpOiBib29sZWFuCmNyZWF0ZUFsbG93YW5jZUJveDoKCXByb3RvIDIgMQoKCS8vICppZjdfY29uZGl0aW9uCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxNjQKCS8vICF0aGlzLmFsbG93YW5jZXMoW293bmVyLCBzcGVuZGVyXSkuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBzcGVuZGVyOiBBZGRyZXNzCgljb25jYXQKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjE2NQoJLy8gdGhpcy5hbGxvd2FuY2VzKFtvd25lciwgc3BlbmRlcl0pLnZhbHVlID0gPHVpbnQyNTY+MAoJZnJhbWVfZGlnIC0xIC8vIG93bmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gc3BlbmRlcjogQWRkcmVzcwoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAoJYm94X3B1dAoKKmlmN19lbmQ6CgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxNjcKCS8vIHJldHVybiB0cnVlOwoJaW50IDEKCXJldHN1YgoKLy8gbm9vcCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX25vb3A6CgkvLyBfbjogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBub29wKHVpbnQ2NCl2b2lkCgljYWxsc3ViIG5vb3AKCWludCAxCglyZXR1cm4KCi8vIG5vb3AoX246IHVpbnQ2NCk6IHZvaWQKbm9vcDoKCXByb3RvIDEgMAoJcmV0c3ViCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX3VwZGF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSB1cGRhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiB1cGRhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gdXBkYXRlQXBwbGljYXRpb24oKTogdm9pZAp1cGRhdGVBcHBsaWNhdGlvbjoKCXByb3RvIDAgMAoKCS8vIHNyYy9jb250cmFjdHMvbGliL093bmFibGUuYWxnby50czo3CgkvLyBhc3NlcnQodGhpcy53YXJkZW4uZXhpc3RzLCAndGhpcyBhcHAgY2FuIG5vdCB1cGRhdGUnKQoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYnl0ZSAweDc3NjE3MjY0NjU2ZSAvLyAid2FyZGVuIgoJYXBwX2dsb2JhbF9nZXRfZXgKCXN3YXAKCXBvcAoKCS8vIHRoaXMgYXBwIGNhbiBub3QgdXBkYXRlCglhc3NlcnQKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9Pd25hYmxlLmFsZ28udHM6OAoJLy8gYXNzZXJ0KHRoaXMudHhuLnNlbmRlciA9PT0gdGhpcy53YXJkZW4udmFsdWUsICdvbmx5IG1hbmFnZXIgY2FuIHVwZGF0ZScpCgl0eG4gU2VuZGVyCglieXRlIDB4Nzc2MTcyNjQ2NTZlIC8vICJ3YXJkZW4iCglhcHBfZ2xvYmFsX2dldAoJPT0KCgkvLyBvbmx5IG1hbmFnZXIgY2FuIHVwZGF0ZQoJYXNzZXJ0CglyZXRzdWIKCi8vIGRlbGV0ZUFwcGxpY2F0aW9uKCl2b2lkCiphYmlfcm91dGVfZGVsZXRlQXBwbGljYXRpb246CgkvLyBleGVjdXRlIGRlbGV0ZUFwcGxpY2F0aW9uKCl2b2lkCgljYWxsc3ViIGRlbGV0ZUFwcGxpY2F0aW9uCglpbnQgMQoJcmV0dXJuCgovLyBkZWxldGVBcHBsaWNhdGlvbigpOiB2b2lkCmRlbGV0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvT3duYWJsZS5hbGdvLnRzOjEyCgkvLyBhc3NlcnQodGhpcy53YXJkZW4uZXhpc3RzLCAndGhpcyBhcHAgY2FuIG5vdCBiZSBkZWxldGVkJykKCXR4bmEgQXBwbGljYXRpb25zIDAKCWJ5dGUgMHg3NzYxNzI2NDY1NmUgLy8gIndhcmRlbiIKCWFwcF9nbG9iYWxfZ2V0X2V4Cglzd2FwCglwb3AKCgkvLyB0aGlzIGFwcCBjYW4gbm90IGJlIGRlbGV0ZWQKCWFzc2VydAoKCS8vIHNyYy9jb250cmFjdHMvbGliL093bmFibGUuYWxnby50czoxMwoJLy8gYXNzZXJ0KHRoaXMudHhuLnNlbmRlciA9PT0gdGhpcy53YXJkZW4udmFsdWUsICdvbmx5IG1hbmFnZXIgY2FuIGRlbGV0ZScpCgl0eG4gU2VuZGVyCglieXRlIDB4Nzc2MTcyNjQ2NTZlIC8vICJ3YXJkZW4iCglhcHBfZ2xvYmFsX2dldAoJPT0KCgkvLyBvbmx5IG1hbmFnZXIgY2FuIGRlbGV0ZQoJYXNzZXJ0CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvT3duYWJsZS5hbGdvLnRzOjE0CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBhbW91bnQ6IDAsCgkvLyAgICAgICBzZW5kZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy53YXJkZW4udmFsdWUsCgkvLyAgICAgICBjbG9zZVJlbWFpbmRlclRvOiB0aGlzLndhcmRlbi52YWx1ZSwKCS8vICAgICAgIHJla2V5VG86IHRoaXMud2FyZGVuLnZhbHVlLAoJLy8gICAgICAgZmVlOiBnbG9iYWxzLm1pblR4bkZlZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIHNyYy9jb250cmFjdHMvbGliL093bmFibGUuYWxnby50czoxNQoJLy8gYW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9Pd25hYmxlLmFsZ28udHM6MTYKCS8vIHNlbmRlcjogdGhpcy5hcHAuYWRkcmVzcwoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvT3duYWJsZS5hbGdvLnRzOjE3CgkvLyByZWNlaXZlcjogdGhpcy53YXJkZW4udmFsdWUKCWJ5dGUgMHg3NzYxNzI2NDY1NmUgLy8gIndhcmRlbiIKCWFwcF9nbG9iYWxfZ2V0CglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvT3duYWJsZS5hbGdvLnRzOjE4CgkvLyBjbG9zZVJlbWFpbmRlclRvOiB0aGlzLndhcmRlbi52YWx1ZQoJYnl0ZSAweDc3NjE3MjY0NjU2ZSAvLyAid2FyZGVuIgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQ2xvc2VSZW1haW5kZXJUbwoKCS8vIHNyYy9jb250cmFjdHMvbGliL093bmFibGUuYWxnby50czoxOQoJLy8gcmVrZXlUbzogdGhpcy53YXJkZW4udmFsdWUKCWJ5dGUgMHg3NzYxNzI2NDY1NmUgLy8gIndhcmRlbiIKCWFwcF9nbG9iYWxfZ2V0CglpdHhuX2ZpZWxkIFJla2V5VG8KCgkvLyBzcmMvY29udHJhY3RzL2xpYi9Pd25hYmxlLmFsZ28udHM6MjAKCS8vIGZlZTogZ2xvYmFscy5taW5UeG5GZWUKCWdsb2JhbCBNaW5UeG5GZWUKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBtYW5hZ2VyKClhZGRyZXNzCiphYmlfcm91dGVfbWFuYWdlcjoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSBtYW5hZ2VyKClhZGRyZXNzCgljYWxsc3ViIG1hbmFnZXIKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBtYW5hZ2VyKCk6IEFkZHJlc3MKbWFuYWdlcjoKCXByb3RvIDAgMQoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBzcmMvY29udHJhY3RzL2xpYi9Pd25hYmxlLmFsZ28udHM6MjYKCS8vIHRoaXMud2FyZGVuLmV4aXN0cwoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYnl0ZSAweDc3NjE3MjY0NjU2ZSAvLyAid2FyZGVuIgoJYXBwX2dsb2JhbF9nZXRfZXgKCXN3YXAKCXBvcAoJYnogKmlmOF9lbmQKCgkvLyAqaWY4X2NvbnNlcXVlbnQKCS8vIHNyYy9jb250cmFjdHMvbGliL093bmFibGUuYWxnby50czoyNwoJLy8gcmV0dXJuIHRoaXMud2FyZGVuLnZhbHVlOwoJYnl0ZSAweDc3NjE3MjY0NjU2ZSAvLyAid2FyZGVuIgoJYXBwX2dsb2JhbF9nZXQKCXJldHN1YgoKKmlmOF9lbmQ6CgkvLyBzcmMvY29udHJhY3RzL2xpYi9Pd25hYmxlLmFsZ28udHM6MjkKCS8vIHJldHVybiBnbG9iYWxzLnplcm9BZGRyZXNzOwoJZ2xvYmFsIFplcm9BZGRyZXNzCglyZXRzdWIKCi8vIGdyYW50KGFkZHJlc3Mpdm9pZAoqYWJpX3JvdXRlX2dyYW50OgoJLy8gbWFuYWdlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCAwIChtYW5hZ2VyKSBmb3IgZ3JhbnQgbXVzdCBiZSBhIGFkZHJlc3MKCWFzc2VydAoKCS8vIGV4ZWN1dGUgZ3JhbnQoYWRkcmVzcyl2b2lkCgljYWxsc3ViIGdyYW50CglpbnQgMQoJcmV0dXJuCgovLyBncmFudChtYW5hZ2VyOiBBZGRyZXNzKTogdm9pZApncmFudDoKCXByb3RvIDEgMAoKCS8vIHNyYy9jb250cmFjdHMvbGliL093bmFibGUuYWxnby50czozMwoJLy8gYXNzZXJ0KHRoaXMudHhuLnNlbmRlciA9PT0gdGhpcy53YXJkZW4udmFsdWUsICd1bmF1dGhvcml6ZWQnKQoJdHhuIFNlbmRlcgoJYnl0ZSAweDc3NjE3MjY0NjU2ZSAvLyAid2FyZGVuIgoJYXBwX2dsb2JhbF9nZXQKCT09CgoJLy8gdW5hdXRob3JpemVkCglhc3NlcnQKCgkvLyAqaWY5X2NvbmRpdGlvbgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvT3duYWJsZS5hbGdvLnRzOjM0CgkvLyBtYW5hZ2VyID09PSBnbG9iYWxzLnplcm9BZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gbWFuYWdlcjogQWRkcmVzcwoJZ2xvYmFsIFplcm9BZGRyZXNzCgk9PQoJYnogKmlmOV9lbHNlCgoJLy8gKmlmOV9jb25zZXF1ZW50CgkvLyBzcmMvY29udHJhY3RzL2xpYi9Pd25hYmxlLmFsZ28udHM6MzUKCS8vIHRoaXMud2FyZGVuLmRlbGV0ZSgpCglieXRlIDB4Nzc2MTcyNjQ2NTZlIC8vICJ3YXJkZW4iCglhcHBfZ2xvYmFsX2RlbAoJYiAqaWY5X2VuZAoKKmlmOV9lbHNlOgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvT3duYWJsZS5hbGdvLnRzOjM3CgkvLyB0aGlzLndhcmRlbi52YWx1ZSA9IG1hbmFnZXIKCWJ5dGUgMHg3NzYxNzI2NDY1NmUgLy8gIndhcmRlbiIKCWZyYW1lX2RpZyAtMSAvLyBtYW5hZ2VyOiBBZGRyZXNzCglhcHBfZ2xvYmFsX3B1dAoKKmlmOV9lbmQ6CglyZXRzdWIKCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYnl0ZVszMl0sYnl0ZVs4XSx1aW50OCx1aW50MjU2KXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIHRvdGFsU3VwcGx5OiB1aW50MjU2Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyA1CglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKHRvdGFsU3VwcGx5KSBmb3IgY3JlYXRlQXBwbGljYXRpb24gbXVzdCBiZSBhIHVpbnQyNTYKCWFzc2VydAoKCS8vIGRlY2ltYWxzOiB1aW50OAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAoJZHVwCglsZW4KCWludCAxCgk9PQoKCS8vIGFyZ3VtZW50IDEgKGRlY2ltYWxzKSBmb3IgY3JlYXRlQXBwbGljYXRpb24gbXVzdCBiZSBhIHVpbnQ4Cglhc3NlcnQKCWJ0b2kKCgkvLyBzeW1ib2w6IGJ5dGVbOF0KCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCWR1cAoJbGVuCglpbnQgOAoJPT0KCgkvLyBhcmd1bWVudCAyIChzeW1ib2wpIGZvciBjcmVhdGVBcHBsaWNhdGlvbiBtdXN0IGJlIGEgYnl0ZVs4XQoJYXNzZXJ0CgoJLy8gbmFtZTogYnl0ZVszMl0KCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMyAobmFtZSkgZm9yIGNyZWF0ZUFwcGxpY2F0aW9uIG11c3QgYmUgYSBieXRlWzMyXQoJYXNzZXJ0CgoJLy8gbWFuYWdlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCA0IChtYW5hZ2VyKSBmb3IgY3JlYXRlQXBwbGljYXRpb24gbXVzdCBiZSBhIGFkZHJlc3MKCWFzc2VydAoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oYWRkcmVzcyxieXRlWzMyXSxieXRlWzhdLHVpbnQ4LHVpbnQyNTYpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24obWFuYWdlcjogQWRkcmVzcywgbmFtZTogU3RhdGljQnl0ZXM8MzI+LCBzeW1ib2w6IFN0YXRpY0J5dGVzPDg+LCBkZWNpbWFsczogdWludDgsIHRvdGFsU3VwcGx5OiB1aW50MjU2KTogdm9pZApjcmVhdGVBcHBsaWNhdGlvbjoKCXByb3RvIDUgMAoKCS8vIHNyYy9jb250cmFjdHMvU21hcnRBc3NldC5hbGdvLnRzOjEzCgkvLyB0aGlzLndhcmRlbi52YWx1ZSA9IG1hbmFnZXIKCWJ5dGUgMHg3NzYxNzI2NDY1NmUgLy8gIndhcmRlbiIKCWZyYW1lX2RpZyAtMSAvLyBtYW5hZ2VyOiBBZGRyZXNzCglhcHBfZ2xvYmFsX3B1dAoKCS8vIHNyYy9jb250cmFjdHMvU21hcnRBc3NldC5hbGdvLnRzOjE0CgkvLyB0aGlzLm5hbWUudmFsdWUgPSBuYW1lCglieXRlIDB4NmU2MTZkNjUgLy8gIm5hbWUiCglmcmFtZV9kaWcgLTIgLy8gbmFtZTogU3RhdGljQnl0ZXM8MzI+CglhcHBfZ2xvYmFsX3B1dAoKCS8vIHNyYy9jb250cmFjdHMvU21hcnRBc3NldC5hbGdvLnRzOjE1CgkvLyB0aGlzLnN5bWJvbC52YWx1ZSA9IHN5bWJvbAoJYnl0ZSAweDczNzk2ZDYyNmY2YyAvLyAic3ltYm9sIgoJZnJhbWVfZGlnIC0zIC8vIHN5bWJvbDogU3RhdGljQnl0ZXM8OD4KCWFwcF9nbG9iYWxfcHV0CgoJLy8gc3JjL2NvbnRyYWN0cy9TbWFydEFzc2V0LmFsZ28udHM6MTYKCS8vIHRoaXMuZGVjaW1hbHMudmFsdWUgPSBkZWNpbWFscwoJYnl0ZSAweDY0NjU2MzY5NmQ2MTZjNzMgLy8gImRlY2ltYWxzIgoJZnJhbWVfZGlnIC00IC8vIGRlY2ltYWxzOiB1aW50OAoJaXRvYgoJZXh0cmFjdCA3IDEKCWFwcF9nbG9iYWxfcHV0CgoJLy8gc3JjL2NvbnRyYWN0cy9TbWFydEFzc2V0LmFsZ28udHM6MTcKCS8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgPSB0b3RhbFN1cHBseQoJYnl0ZSAweDc0NmY3NDYxNmM1ZjczNzU3MDcwNmM3OSAvLyAidG90YWxfc3VwcGx5IgoJZnJhbWVfZGlnIC01IC8vIHRvdGFsU3VwcGx5OiB1aW50MjU2CglhcHBfZ2xvYmFsX3B1dAoKCS8vIHNyYy9jb250cmFjdHMvU21hcnRBc3NldC5hbGdvLnRzOjE4CgkvLyB0aGlzLmluaXRpYWxpemVkLnZhbHVlID0gZmFsc2UKCWJ5dGUgMHg2OTZlNjk3NDY5NjE2YzY5N2E2NTY0IC8vICJpbml0aWFsaXplZCIKCWludCAwCglieXRlIDB4MDAKCWludCAwCgl1bmNvdmVyIDIKCXNldGJpdAoJYXBwX2dsb2JhbF9wdXQKCXJldHN1YgoKLy8gYm9vdHN0cmFwKHBheSl2b2lkCiphYmlfcm91dGVfYm9vdHN0cmFwOgoJLy8gdHhuOiBwYXkKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IHBheQoJPT0KCgkvLyBhcmd1bWVudCAwICh0eG4pIGZvciBib290c3RyYXAgbXVzdCBiZSBhIHBheSB0cmFuc2FjdGlvbgoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBib290c3RyYXAocGF5KXZvaWQKCWNhbGxzdWIgYm9vdHN0cmFwCglpbnQgMQoJcmV0dXJuCgovLyBib290c3RyYXAodHhuOiBQYXlUeG4pOiB2b2lkCmJvb3RzdHJhcDoKCXByb3RvIDEgMAoKCS8vIHNyYy9jb250cmFjdHMvU21hcnRBc3NldC5hbGdvLnRzOjIyCgkvLyB2ZXJpZnlQYXlUeG4odHhuLCB7CgkvLyAgICAgICBzZW5kZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYW1vdW50OiB7IGdyZWF0ZXJUaGFuRXF1YWxUbzogMiAqIGdsb2JhbHMubWluQmFsYW5jZSB9LAoJLy8gICAgICAgY2xvc2VSZW1haW5kZXJUbzogZ2xvYmFscy56ZXJvQWRkcmVzcywKCS8vICAgICAgIHJla2V5VG86IGdsb2JhbHMuemVyb0FkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBzZW5kZXIKCWZyYW1lX2RpZyAtMSAvLyB0eG46IFBheVR4bgoJZ3R4bnMgU2VuZGVyCgl0eG4gU2VuZGVyCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoidHhuIiwiZmllbGQiOiJzZW5kZXIiLCJleHBlY3RlZCI6InRoaXMudHhuLnNlbmRlciJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyB0eG46IFBheVR4bgoJZ3R4bnMgUmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoidHhuIiwiZmllbGQiOiJyZWNlaXZlciIsImV4cGVjdGVkIjoidGhpcy5hcHAuYWRkcmVzcyJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgYW1vdW50CglmcmFtZV9kaWcgLTEgLy8gdHhuOiBQYXlUeG4KCWd0eG5zIEFtb3VudAoJaW50IDIKCWdsb2JhbCBNaW5CYWxhbmNlCgkqCgk+PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoidHhuIiwiZmllbGQiOiJhbW91bnQiLCJjb25kaXRpb24iOiJncmVhdGVyVGhhbkVxdWFsVG8iLCJleHBlY3RlZCI6Ij49MiAqIGdsb2JhbHMubWluQmFsYW5jZSJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgY2xvc2VSZW1haW5kZXJUbwoJZnJhbWVfZGlnIC0xIC8vIHR4bjogUGF5VHhuCglndHhucyBDbG9zZVJlbWFpbmRlclRvCglnbG9iYWwgWmVyb0FkZHJlc3MKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJ0eG4iLCJmaWVsZCI6ImNsb3NlUmVtYWluZGVyVG8iLCJleHBlY3RlZCI6Imdsb2JhbHMuemVyb0FkZHJlc3MifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IHJla2V5VG8KCWZyYW1lX2RpZyAtMSAvLyB0eG46IFBheVR4bgoJZ3R4bnMgUmVrZXlUbwoJZ2xvYmFsIFplcm9BZGRyZXNzCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoidHhuIiwiZmllbGQiOiJyZWtleVRvIiwiZXhwZWN0ZWQiOiJnbG9iYWxzLnplcm9BZGRyZXNzIn0KCWFzc2VydAoKCS8vIHNyYy9jb250cmFjdHMvU21hcnRBc3NldC5hbGdvLnRzOjI5CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLndhcmRlbi52YWx1ZSwgJ29ubHkgbWFuYWdlciBjYW4gY2FsbCBib290c3RyYXAnKQoJdHhuIFNlbmRlcgoJYnl0ZSAweDc3NjE3MjY0NjU2ZSAvLyAid2FyZGVuIgoJYXBwX2dsb2JhbF9nZXQKCT09CgoJLy8gb25seSBtYW5hZ2VyIGNhbiBjYWxsIGJvb3RzdHJhcAoJYXNzZXJ0CgoJLy8gc3JjL2NvbnRyYWN0cy9TbWFydEFzc2V0LmFsZ28udHM6MzAKCS8vIGFzc2VydCghdGhpcy5pbml0aWFsaXplZC52YWx1ZSAmJiAhdGhpcy5iYWxhbmNlcyh0aGlzLnR4bi5zZW5kZXIpLmV4aXN0cywgJ2FscmVhZHkgaW5pdGlhbGl6ZWQnKQoJYnl0ZSAweDY5NmU2OTc0Njk2MTZjNjk3YTY1NjQgLy8gImluaXRpYWxpemVkIgoJYXBwX2dsb2JhbF9nZXQKCWludCAwCglnZXRiaXQKCSEKCWR1cAoJYnogKnNraXBfYW5kMgoJdHhuIFNlbmRlcgoJYm94X2xlbgoJc3dhcAoJcG9wCgkhCgkmJgoKKnNraXBfYW5kMjoKCS8vIGFscmVhZHkgaW5pdGlhbGl6ZWQKCWFzc2VydAoKCS8vIHNyYy9jb250cmFjdHMvU21hcnRBc3NldC5hbGdvLnRzOjMxCgkvLyB0aGlzLmluaXRpYWxpemVkLnZhbHVlID0gdHJ1ZQoJYnl0ZSAweDY5NmU2OTc0Njk2MTZjNjk3YTY1NjQgLy8gImluaXRpYWxpemVkIgoJaW50IDEKCWJ5dGUgMHgwMAoJaW50IDAKCXVuY292ZXIgMgoJc2V0Yml0CglhcHBfZ2xvYmFsX3B1dAoKCS8vIHNyYy9jb250cmFjdHMvU21hcnRBc3NldC5hbGdvLnRzOjMyCgkvLyB0aGlzLmJhbGFuY2VzKHRoaXMudHhuLnNlbmRlcikudmFsdWUgPSB0aGlzLnRvdGFsU3VwcGx5LnZhbHVlCgl0eG4gU2VuZGVyCglieXRlIDB4NzQ2Zjc0NjE2YzVmNzM3NTcwNzA2Yzc5IC8vICJ0b3RhbF9zdXBwbHkiCglhcHBfZ2xvYmFsX2dldAoJYm94X3B1dAoKCS8vIHNyYy9jb250cmFjdHMvU21hcnRBc3NldC5hbGdvLnRzOjMzCgkvLyB0aGlzLmFyYzIwMF9UcmFuc2Zlci5sb2coewoJLy8gICAgICAgZnJvbTogZ2xvYmFscy56ZXJvQWRkcmVzcywKCS8vICAgICAgIHRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICB2YWx1ZTogdGhpcy50b3RhbFN1cHBseS52YWx1ZQoJLy8gICAgIH0pCglieXRlIDB4Nzk4M2MzNWMgLy8gYXJjMjAwX1RyYW5zZmVyKGFkZHJlc3MsYWRkcmVzcyx1aW50MjU2KQoJZ2xvYmFsIFplcm9BZGRyZXNzCgl0eG4gU2VuZGVyCgljb25jYXQKCWJ5dGUgMHg3NDZmNzQ2MTZjNWY3Mzc1NzA3MDZjNzkgLy8gInRvdGFsX3N1cHBseSIKCWFwcF9nbG9iYWxfZ2V0Cgljb25jYXQKCWNvbmNhdAoJbG9nCglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oYWRkcmVzcyxieXRlWzMyXSxieXRlWzhdLHVpbnQ4LHVpbnQyNTYpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjMjAwX25hbWUoKWJ5dGVbMzJdIgoJbWV0aG9kICJhcmMyMDBfc3ltYm9sKClieXRlWzhdIgoJbWV0aG9kICJhcmMyMDBfZGVjaW1hbHMoKXVpbnQ4IgoJbWV0aG9kICJhcmMyMDBfdG90YWxTdXBwbHkoKXVpbnQyNTYiCgltZXRob2QgImFyYzIwMF9iYWxhbmNlT2YoYWRkcmVzcyl1aW50MjU2IgoJbWV0aG9kICJhcmMyMDBfYWxsb3dhbmNlKGFkZHJlc3MsYWRkcmVzcyl1aW50MjU2IgoJbWV0aG9kICJhcmMyMDBfdHJhbnNmZXIoYWRkcmVzcyx1aW50MjU2KWJvb2wiCgltZXRob2QgImFyYzIwMF9hcHByb3ZlKGFkZHJlc3MsdWludDI1Nilib29sIgoJbWV0aG9kICJhcmMyMDBfdHJhbnNmZXJGcm9tKGFkZHJlc3MsYWRkcmVzcyx1aW50MjU2KWJvb2wiCgltZXRob2QgInN1cHBvcnRzSW50ZXJmYWNlKGJ5dGVbNF0pYm9vbCIKCW1ldGhvZCAiemVyb0FkZHJlc3MoKWFkZHJlc3MiCgltZXRob2QgImhhc0JveChhZGRyZXNzLGFkZHJlc3MpYm9vbCIKCW1ldGhvZCAiY3JlYXRlQmFsYW5jZUJveChhZGRyZXNzKWJvb2wiCgltZXRob2QgImNyZWF0ZUFsbG93YW5jZUJveChhZGRyZXNzLGFkZHJlc3MpYm9vbCIKCW1ldGhvZCAibm9vcCh1aW50NjQpdm9pZCIKCW1ldGhvZCAibWFuYWdlcigpYWRkcmVzcyIKCW1ldGhvZCAiZ3JhbnQoYWRkcmVzcyl2b2lkIgoJbWV0aG9kICJib290c3RyYXAocGF5KXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2FyYzIwMF9uYW1lICphYmlfcm91dGVfYXJjMjAwX3N5bWJvbCAqYWJpX3JvdXRlX2FyYzIwMF9kZWNpbWFscyAqYWJpX3JvdXRlX2FyYzIwMF90b3RhbFN1cHBseSAqYWJpX3JvdXRlX2FyYzIwMF9iYWxhbmNlT2YgKmFiaV9yb3V0ZV9hcmMyMDBfYWxsb3dhbmNlICphYmlfcm91dGVfYXJjMjAwX3RyYW5zZmVyICphYmlfcm91dGVfYXJjMjAwX2FwcHJvdmUgKmFiaV9yb3V0ZV9hcmMyMDBfdHJhbnNmZXJGcm9tICphYmlfcm91dGVfc3VwcG9ydHNJbnRlcmZhY2UgKmFiaV9yb3V0ZV96ZXJvQWRkcmVzcyAqYWJpX3JvdXRlX2hhc0JveCAqYWJpX3JvdXRlX2NyZWF0ZUJhbGFuY2VCb3ggKmFiaV9yb3V0ZV9jcmVhdGVBbGxvd2FuY2VCb3ggKmFiaV9yb3V0ZV9ub29wICphYmlfcm91dGVfbWFuYWdlciAqYWJpX3JvdXRlX2dyYW50ICphYmlfcm91dGVfYm9vdHN0cmFwCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgTm9PcAoJZXJyCgoqY2FsbF9VcGRhdGVBcHBsaWNhdGlvbjoKCW1ldGhvZCAidXBkYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX3VwZGF0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgVXBkYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfRGVsZXRlQXBwbGljYXRpb246CgltZXRob2QgImRlbGV0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9kZWxldGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50I