60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600b90805190602001906200005192919062000813565b506000600d55600a600e55611e61600f556000601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff0219169083151502179055506000601060026101000a81548160ff021916908315150217905550348015620000c057600080fd5b506040518060400160405280600881526020017f4475636b6c696e670000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f4455434b4c494e4700000000000000000000000000000000000000000000000081525081600290805190602001906200014592919062000813565b5080600390805190602001906200015e92919062000813565b506200016f620001e260201b60201c565b6000819055505050620001976200018b620001e760201b60201c565b620001ef60201b60201c565b6001600981905550620001b2336005620002b560201b60201c565b620001dc60405180608001604052806041815260200162004dff60419139620002db60201b60201c565b62000b8c565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002d78282604051806020016040528060008152506200038660201b60201c565b5050565b620002eb620001e760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003116200064f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200036a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200036190620009e4565b60405180910390fd5b80600a90805190602001906200038292919062000813565b5050565b60008054905060006200039f856200067960201b60201c565b1415620003d8576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083141562000414576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200042960008583866200068360201b60201c565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e162000496600185146200068960201b60201c565b901b60a042901b620004ae866200067960201b60201c565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b14620005bf575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46200056b60008784806001019550876200069360201b60201c565b620005a2576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210620004f4578260005414620005b957600080fd5b6200062b565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210620005c0575b8160008190555050506200064960008583866200080560201b60201c565b50505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b50505050565b6000819050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620006c16200080b60201b60201c565b8786866040518563ffffffff1660e01b8152600401620006e5949392919062000990565b602060405180830381600087803b1580156200070057600080fd5b505af19250505080156200073457506040513d601f19601f82011682018060405250810190620007319190620008da565b60015b620007b2573d806000811462000767576040519150601f19603f3d011682016040523d82523d6000602084013e6200076c565b606091505b50600081511415620007aa576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b50505050565b600033905090565b828054620008219062000ad3565b90600052602060002090601f01602090048101928262000845576000855562000891565b82601f106200086057805160ff191683800117855562000891565b8280016001018555821562000891579182015b828111156200089057825182559160200191906001019062000873565b5b509050620008a09190620008a4565b5090565b5b80821115620008bf576000816000905550600101620008a5565b5090565b600081519050620008d48162000b72565b92915050565b600060208284031215620008ed57600080fd5b6000620008fd84828501620008c3565b91505092915050565b620009118162000a33565b82525050565b6000620009248262000a06565b62000930818562000a11565b93506200094281856020860162000a9d565b6200094d8162000b38565b840191505092915050565b60006200096760208362000a22565b9150620009748262000b49565b602082019050919050565b6200098a8162000a93565b82525050565b6000608082019050620009a7600083018762000906565b620009b6602083018662000906565b620009c560408301856200097f565b8181036060830152620009d9818462000917565b905095945050505050565b60006020820190508181036000830152620009ff8162000958565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000a408262000a73565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000abd57808201518184015260208101905062000aa0565b8381111562000acd576000848401525b50505050565b6000600282049050600182168062000aec57607f821691505b6020821081141562000b035762000b0262000b09565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b62000b7d8162000a47565b811462000b8957600080fd5b50565b6142638062000b9c6000396000f3fe6080604052600436106102305760003560e01c80638da5cb5b1161012e578063bd32fb66116100ab578063e0a808531161006f578063e0a80853146107fb578063e985e9c514610824578063efbd73f414610861578063f2fde38b1461088a578063f968adbe146108b357610230565b8063bd32fb6614610702578063c87b56dd1461072b578063c884ef8314610768578063d1239730146107a5578063d5abeb01146107d057610230565b8063a22cb465116100f2578063a22cb46514610631578063a45ba8e71461065a578063aa98e0c614610685578063b88d4fde146106b0578063bbaac02f146106d957610230565b80638da5cb5b1461056b57806391b7f5ed1461059657806395d89b41146105bf578063a035b1fe146105ea578063a0712d681461061557610230565b806342842e0e116101bc5780636352211e116101805780636352211e1461049a57806370a08231146104d7578063715018a614610514578063763445681461052b5780637ba5e6211461055457610230565b806342842e0e146103b5578063438b6300146103de578063518302271461041b5780635503a0e81461044657806355f804b31461047157610230565b806318160ddd1161020357806318160ddd1461030357806323b872dd1461032e57806339319741146103575780633b439351146103825780633ccfd60b1461039e57610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c6004803603810190610257919061328e565b6108de565b6040516102699190613859565b60405180910390f35b34801561027e57600080fd5b50610287610970565b604051610294919061388f565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190613321565b610a02565b6040516102d191906137d0565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc91906131a8565b610a7e565b005b34801561030f57600080fd5b50610318610c25565b6040516103259190613a61565b60405180910390f35b34801561033a57600080fd5b50610355600480360381019061035091906130a2565b610c3c565b005b34801561036357600080fd5b5061036c610c4c565b6040516103799190613859565b60405180910390f35b61039c600480360381019061039791906131e4565b610c5f565b005b3480156103aa57600080fd5b506103b3610eb4565b005b3480156103c157600080fd5b506103dc60048036038101906103d791906130a2565b610fdf565b005b3480156103ea57600080fd5b506104056004803603810190610400919061303d565b610fff565b6040516104129190613837565b60405180910390f35b34801561042757600080fd5b50610430611151565b60405161043d9190613859565b60405180910390f35b34801561045257600080fd5b5061045b611164565b604051610468919061388f565b60405180910390f35b34801561047d57600080fd5b50610498600480360381019061049391906132e0565b6111f2565b005b3480156104a657600080fd5b506104c160048036038101906104bc9190613321565b611288565b6040516104ce91906137d0565b60405180910390f35b3480156104e357600080fd5b506104fe60048036038101906104f9919061303d565b61129a565b60405161050b9190613a61565b60405180910390f35b34801561052057600080fd5b5061052961132f565b005b34801561053757600080fd5b50610552600480360381019061054d919061323c565b6113b7565b005b34801561056057600080fd5b50610569611450565b005b34801561057757600080fd5b50610580611546565b60405161058d91906137d0565b60405180910390f35b3480156105a257600080fd5b506105bd60048036038101906105b89190613321565b611570565b005b3480156105cb57600080fd5b506105d46115f6565b6040516105e1919061388f565b60405180910390f35b3480156105f657600080fd5b506105ff611688565b60405161060c9190613a61565b60405180910390f35b61062f600480360381019061062a9190613321565b61168e565b005b34801561063d57600080fd5b506106586004803603810190610653919061316c565b6117f2565b005b34801561066657600080fd5b5061066f61196a565b60405161067c919061388f565b60405180910390f35b34801561069157600080fd5b5061069a6119f8565b6040516106a79190613874565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d291906130f1565b6119fe565b005b3480156106e557600080fd5b5061070060048036038101906106fb91906132e0565b611a71565b005b34801561070e57600080fd5b5061072960048036038101906107249190613265565b611b07565b005b34801561073757600080fd5b50610752600480360381019061074d9190613321565b611b8d565b60405161075f919061388f565b60405180910390f35b34801561077457600080fd5b5061078f600480360381019061078a919061303d565b611ce6565b60405161079c9190613859565b60405180910390f35b3480156107b157600080fd5b506107ba611d06565b6040516107c79190613859565b60405180910390f35b3480156107dc57600080fd5b506107e5611d19565b6040516107f29190613a61565b60405180910390f35b34801561080757600080fd5b50610822600480360381019061081d919061323c565b611d1f565b005b34801561083057600080fd5b5061084b60048036038101906108469190613066565b611db8565b6040516108589190613859565b60405180910390f35b34801561086d57600080fd5b506108886004803603810190610883919061334a565b611e4c565b005b34801561089657600080fd5b506108b160048036038101906108ac919061303d565b611f38565b005b3480156108bf57600080fd5b506108c8612030565b6040516108d59190613a61565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061093957506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109695750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461097f90613d74565b80601f01602080910402602001604051908101604052809291908181526020018280546109ab90613d74565b80156109f85780601f106109cd576101008083540402835291602001916109f8565b820191906000526020600020905b8154815290600101906020018083116109db57829003601f168201915b5050505050905090565b6000610a0d82612036565b610a43576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a8982612095565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610af1576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b10612163565b73ffffffffffffffffffffffffffffffffffffffff1614610b7357610b3c81610b37612163565b611db8565b610b72576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000610c2f61216b565b6001546000540303905090565b610c47838383612170565b505050565b601060019054906101000a900460ff1681565b828282610cd8838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506011543384604051602001610cbd92919061375e565b60405160208183030381529060405280519060200120612538565b610d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0e90613a41565b60405180910390fd5b60026009541415610d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5490613a21565b60405180910390fd5b6002600981905550601060019054906101000a900460ff1615610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac90613a01565b60405180910390fd5b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3990613941565b60405180910390fd5b610e4c338561254f565b6001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600981905550505050505050565b610ebc61256d565b73ffffffffffffffffffffffffffffffffffffffff16610eda611546565b73ffffffffffffffffffffffffffffffffffffffff1614610f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2790613961565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610f56906137bb565b60006040518083038185875af1925050503d8060008114610f93576040519150601f19603f3d011682016040523d82523d6000602084013e610f98565b606091505b5050905080610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd3906139c1565b60405180910390fd5b50565b610ffa838383604051806020016040528060008152506119fe565b505050565b6060600061100c8361129a565b905060008167ffffffffffffffff811115611050577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561107e5781602001602082028036833780820191505090505b5090506000805b83811080156110965750600f548211155b156111455760006110a683611288565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111315782848381518110611116577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050818061112d90613dd7565b9250505b828061113c90613dd7565b93505050611085565b82945050505050919050565b601060029054906101000a900460ff1681565b600b805461117190613d74565b80601f016020809104026020016040519081016040528092919081815260200182805461119d90613d74565b80156111ea5780601f106111bf576101008083540402835291602001916111ea565b820191906000526020600020905b8154815290600101906020018083116111cd57829003601f168201915b505050505081565b6111fa61256d565b73ffffffffffffffffffffffffffffffffffffffff16611218611546565b73ffffffffffffffffffffffffffffffffffffffff161461126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126590613961565b60405180910390fd5b80600c9080519060200190611284929190612e02565b5050565b600061129382612095565b9050919050565b6000806112a683612575565b14156112de576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b61133761256d565b73ffffffffffffffffffffffffffffffffffffffff16611355611546565b73ffffffffffffffffffffffffffffffffffffffff16146113ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a290613961565b60405180910390fd5b6113b5600061257f565b565b6113bf61256d565b73ffffffffffffffffffffffffffffffffffffffff166113dd611546565b73ffffffffffffffffffffffffffffffffffffffff1614611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a90613961565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b61145861256d565b73ffffffffffffffffffffffffffffffffffffffff16611476611546565b73ffffffffffffffffffffffffffffffffffffffff16146114cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c390613961565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff0219169083151502179055506115446040518060400160405280601081526020017f4d696e7420456e61626c65643a20257300000000000000000000000000000000815250601060009054906101000a900460ff16612645565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61157861256d565b73ffffffffffffffffffffffffffffffffffffffff16611596611546565b73ffffffffffffffffffffffffffffffffffffffff16146115ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e390613961565b60405180910390fd5b80600d8190555050565b60606003805461160590613d74565b80601f016020809104026020016040519081016040528092919081815260200182805461163190613d74565b801561167e5780601f106116535761010080835404028352916020019161167e565b820191906000526020600020905b81548152906001019060200180831161166157829003601f168201915b5050505050905090565b600d5481565b6000600d54905080826116a19190613c26565b3410156116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da906139a1565b60405180910390fd5b6001600f546116f29190613b9f565b826116fb610c25565b6117059190613b9f565b10611745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173c90613901565b60405180910390fd5b601060009054906101000a900460ff16611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b906138e1565b60405180910390fd5b6001600e546117a39190613b9f565b82106117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db906139e1565b60405180910390fd5b6117ee338361254f565b5050565b6117fa612163565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561185f576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061186c612163565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611919612163565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161195e9190613859565b60405180910390a35050565b600a805461197790613d74565b80601f01602080910402602001604051908101604052809291908181526020018280546119a390613d74565b80156119f05780601f106119c5576101008083540402835291602001916119f0565b820191906000526020600020905b8154815290600101906020018083116119d357829003601f168201915b505050505081565b60115481565b611a09848484612170565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611a6b57611a34848484846126e1565b611a6a576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b611a7961256d565b73ffffffffffffffffffffffffffffffffffffffff16611a97611546565b73ffffffffffffffffffffffffffffffffffffffff1614611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae490613961565b60405180910390fd5b80600a9080519060200190611b03929190612e02565b5050565b611b0f61256d565b73ffffffffffffffffffffffffffffffffffffffff16611b2d611546565b73ffffffffffffffffffffffffffffffffffffffff1614611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a90613961565b60405180910390fd5b8060118190555050565b6060611b9882612036565b611bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bce90613981565b60405180910390fd5b60001515601060029054906101000a900460ff1615151415611c8557600a8054611c0090613d74565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2c90613d74565b8015611c795780601f10611c4e57610100808354040283529160200191611c79565b820191906000526020600020905b815481529060010190602001808311611c5c57829003601f168201915b50505050509050611ce1565b6000611c8f612841565b90506000815111611caf5760405180602001604052806000815250611cdd565b80611cb9846128d3565b600b604051602001611ccd9392919061378a565b6040516020818303038152906040525b9150505b919050565b60126020528060005260406000206000915054906101000a900460ff1681565b601060009054906101000a900460ff1681565b600f5481565b611d2761256d565b73ffffffffffffffffffffffffffffffffffffffff16611d45611546565b73ffffffffffffffffffffffffffffffffffffffff1614611d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9290613961565b60405180910390fd5b80601060026101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e5461256d565b73ffffffffffffffffffffffffffffffffffffffff16611e72611546565b73ffffffffffffffffffffffffffffffffffffffff1614611ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebf90613961565b60405180910390fd5b6001600f54611ed79190613b9f565b82611ee0610c25565b611eea9190613b9f565b10611f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2190613901565b60405180910390fd5b611f34818361254f565b5050565b611f4061256d565b73ffffffffffffffffffffffffffffffffffffffff16611f5e611546565b73ffffffffffffffffffffffffffffffffffffffff1614611fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fab90613961565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201b90613921565b60405180910390fd5b61202d8161257f565b50565b600e5481565b60008161204161216b565b11158015612050575060005482105b801561208e575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600080829050806120a461216b565b1161212c5760005481101561212b5760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415612129575b600081141561211f5760046000836001900393508381526020019081526020016000205490506120f4565b809250505061215e565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b600090565b600061217b82612095565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146121e2576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008573ffffffffffffffffffffffffffffffffffffffff1661223b612163565b73ffffffffffffffffffffffffffffffffffffffff16148061226a575061226986612264612163565b611db8565b5b806122a75750612278612163565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050806122e0576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006122eb86612575565b1415612323576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123308686866001612a80565b600061233b83612575565b14612377576006600085815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b61243e87612575565b1717600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841614156124c85760006001850190506000600460008381526020019081526020016000205414156124c65760005481146124c5578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125308686866001612a86565b505050505050565b6000826125458584612a8c565b1490509392505050565b612569828260405180602001604052806000815250612b27565b5050565b600033905090565b6000819050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126dd828260405160240161265b9291906138b1565b6040516020818303038152906040527fc3b55635000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612db8565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612707612163565b8786866040518563ffffffff1660e01b815260040161272994939291906137eb565b602060405180830381600087803b15801561274357600080fd5b505af192505050801561277457506040513d601f19601f8201168201806040525081019061277191906132b7565b60015b6127ee573d80600081146127a4576040519150601f19603f3d011682016040523d82523d6000602084013e6127a9565b606091505b506000815114156127e6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600c805461285090613d74565b80601f016020809104026020016040519081016040528092919081815260200182805461287c90613d74565b80156128c95780601f1061289e576101008083540402835291602001916128c9565b820191906000526020600020905b8154815290600101906020018083116128ac57829003601f168201915b5050505050905090565b6060600082141561291b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a7b565b600082905060005b6000821461294d57808061293690613dd7565b915050600a826129469190613bf5565b9150612923565b60008167ffffffffffffffff81111561298f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156129c15781602001600182028036833780820191505090505b5090505b60008514612a74576001826129da9190613c80565b9150600a856129e99190613e4e565b60306129f59190613b9f565b60f81b818381518110612a31577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a6d9190613bf5565b94506129c5565b8093505050505b919050565b50505050565b50505050565b60008082905060005b8451811015612b1c576000858281518110612ad9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311612afb57612af48382612de1565b9250612b08565b612b058184612de1565b92505b508080612b1490613dd7565b915050612a95565b508091505092915050565b6000805490506000612b3885612575565b1415612b70576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415612bab576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612bb86000858386612a80565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e1612c1d60018514612df8565b901b60a042901b612c2d86612575565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b14612d31575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ce160008784806001019550876126e1565b612d17576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210612c72578260005414612d2c57600080fd5b612d9c565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612d32575b816000819055505050612db26000858386612a86565b50505050565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b600082600052816020526040600020905092915050565b6000819050919050565b828054612e0e90613d74565b90600052602060002090601f016020900481019282612e305760008555612e77565b82601f10612e4957805160ff1916838001178555612e77565b82800160010185558215612e77579182015b82811115612e76578251825591602001919060010190612e5b565b5b509050612e849190612e88565b5090565b5b80821115612ea1576000816000905550600101612e89565b5090565b6000612eb8612eb384613aa1565b613a7c565b905082815260208101848484011115612ed057600080fd5b612edb848285613d32565b509392505050565b6000612ef6612ef184613ad2565b613a7c565b905082815260208101848484011115612f0e57600080fd5b612f19848285613d32565b509392505050565b600081359050612f30816141ba565b92915050565b60008083601f840112612f4857600080fd5b8235905067ffffffffffffffff811115612f6157600080fd5b602083019150836020820283011115612f7957600080fd5b9250929050565b600081359050612f8f816141d1565b92915050565b600081359050612fa4816141e8565b92915050565b600081359050612fb9816141ff565b92915050565b600081519050612fce816141ff565b92915050565b600082601f830112612fe557600080fd5b8135612ff5848260208601612ea5565b91505092915050565b600082601f83011261300f57600080fd5b813561301f848260208601612ee3565b91505092915050565b60008135905061303781614216565b92915050565b60006020828403121561304f57600080fd5b600061305d84828501612f21565b91505092915050565b6000806040838503121561307957600080fd5b600061308785828601612f21565b925050602061309885828601612f21565b9150509250929050565b6000806000606084860312156130b757600080fd5b60006130c586828701612f21565b93505060206130d686828701612f21565b92505060406130e786828701613028565b9150509250925092565b6000806000806080858703121561310757600080fd5b600061311587828801612f21565b945050602061312687828801612f21565b935050604061313787828801613028565b925050606085013567ffffffffffffffff81111561315457600080fd5b61316087828801612fd4565b91505092959194509250565b6000806040838503121561317f57600080fd5b600061318d85828601612f21565b925050602061319e85828601612f80565b9150509250929050565b600080604083850312156131bb57600080fd5b60006131c985828601612f21565b92505060206131da85828601613028565b9150509250929050565b6000806000604084860312156131f957600080fd5b600084013567ffffffffffffffff81111561321357600080fd5b61321f86828701612f36565b9350935050602061323286828701613028565b9150509250925092565b60006020828403121561324e57600080fd5b600061325c84828501612f80565b91505092915050565b60006020828403121561327757600080fd5b600061328584828501612f95565b91505092915050565b6000602082840312156132a057600080fd5b60006132ae84828501612faa565b91505092915050565b6000602082840312156132c957600080fd5b60006132d784828501612fbf565b91505092915050565b6000602082840312156132f257600080fd5b600082013567ffffffffffffffff81111561330c57600080fd5b61331884828501612ffe565b91505092915050565b60006020828403121561333357600080fd5b600061334184828501613028565b91505092915050565b6000806040838503121561335d57600080fd5b600061336b85828601613028565b925050602061337c85828601612f21565b9150509250929050565b60006133928383613729565b60208301905092915050565b6133a781613cb4565b82525050565b6133be6133b982613cb4565b613e20565b82525050565b60006133cf82613b28565b6133d98185613b56565b93506133e483613b03565b8060005b838110156134155781516133fc8882613386565b975061340783613b49565b9250506001810190506133e8565b5085935050505092915050565b61342b81613cc6565b82525050565b61343a81613cd2565b82525050565b600061344b82613b33565b6134558185613b67565b9350613465818560208601613d41565b61346e81613f3b565b840191505092915050565b600061348482613b3e565b61348e8185613b83565b935061349e818560208601613d41565b6134a781613f3b565b840191505092915050565b60006134bd82613b3e565b6134c78185613b94565b93506134d7818560208601613d41565b80840191505092915050565b600081546134f081613d74565b6134fa8186613b94565b94506001821660008114613515576001811461352657613559565b60ff19831686528186019350613559565b61352f85613b13565b60005b8381101561355157815481890152600182019150602081019050613532565b838801955050505b50505092915050565b600061356f601783613b83565b915061357a82613f59565b602082019050919050565b6000613592600783613b83565b915061359d82613f82565b602082019050919050565b60006135b5602683613b83565b91506135c082613fab565b604082019050919050565b60006135d8602583613b83565b91506135e382613ffa565b604082019050919050565b60006135fb602083613b83565b915061360682614049565b602082019050919050565b600061361e602f83613b83565b915061362982614072565b604082019050919050565b6000613641601d83613b83565b915061364c826140c1565b602082019050919050565b6000613664600083613b78565b915061366f826140ea565b600082019050919050565b6000613687601083613b83565b9150613692826140ed565b602082019050919050565b60006136aa601383613b83565b91506136b582614116565b602082019050919050565b60006136cd601283613b83565b91506136d88261413f565b602082019050919050565b60006136f0601f83613b83565b91506136fb82614168565b602082019050919050565b6000613713602083613b83565b915061371e82614191565b602082019050919050565b61373281613d28565b82525050565b61374181613d28565b82525050565b61375861375382613d28565b613e44565b82525050565b600061376a82856133ad565b60148201915061377a8284613747565b6020820191508190509392505050565b600061379682866134b2565b91506137a282856134b2565b91506137ae82846134e3565b9150819050949350505050565b60006137c682613657565b9150819050919050565b60006020820190506137e5600083018461339e565b92915050565b6000608082019050613800600083018761339e565b61380d602083018661339e565b61381a6040830185613738565b818103606083015261382c8184613440565b905095945050505050565b6000602082019050818103600083015261385181846133c4565b905092915050565b600060208201905061386e6000830184613422565b92915050565b60006020820190506138896000830184613431565b92915050565b600060208201905081810360008301526138a98184613479565b905092915050565b600060408201905081810360008301526138cb8185613479565b90506138da6020830184613422565b9392505050565b600060208201905081810360008301526138fa81613562565b9050919050565b6000602082019050818103600083015261391a81613585565b9050919050565b6000602082019050818103600083015261393a816135a8565b9050919050565b6000602082019050818103600083015261395a816135cb565b9050919050565b6000602082019050818103600083015261397a816135ee565b9050919050565b6000602082019050818103600083015261399a81613611565b9050919050565b600060208201905081810360008301526139ba81613634565b9050919050565b600060208201905081810360008301526139da8161367a565b9050919050565b600060208201905081810360008301526139fa8161369d565b9050919050565b60006020820190508181036000830152613a1a816136c0565b9050919050565b60006020820190508181036000830152613a3a816136e3565b9050919050565b60006020820190508181036000830152613a5a81613706565b9050919050565b6000602082019050613a766000830184613738565b92915050565b6000613a86613a97565b9050613a928282613da6565b919050565b6000604051905090565b600067ffffffffffffffff821115613abc57613abb613f0c565b5b613ac582613f3b565b9050602081019050919050565b600067ffffffffffffffff821115613aed57613aec613f0c565b5b613af682613f3b565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613baa82613d28565b9150613bb583613d28565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bea57613be9613e7f565b5b828201905092915050565b6000613c0082613d28565b9150613c0b83613d28565b925082613c1b57613c1a613eae565b5b828204905092915050565b6000613c3182613d28565b9150613c3c83613d28565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c7557613c74613e7f565b5b828202905092915050565b6000613c8b82613d28565b9150613c9683613d28565b925082821015613ca957613ca8613e7f565b5b828203905092915050565b6000613cbf82613d08565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d5f578082015181840152602081019050613d44565b83811115613d6e576000848401525b50505050565b60006002820490506001821680613d8c57607f821691505b60208210811415613da057613d9f613edd565b5b50919050565b613daf82613f3b565b810181811067ffffffffffffffff82111715613dce57613dcd613f0c565b5b80604052505050565b6000613de282613d28565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613e1557613e14613e7f565b5b600182019050919050565b6000613e2b82613e32565b9050919050565b6000613e3d82613f4c565b9050919050565b6000819050919050565b6000613e5982613d28565b9150613e6483613d28565b925082613e7457613e73613eae565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4d696e74696e67206973206e6f74206c69766520796574000000000000000000600082015250565b7f4e6f206d6f726500000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4e465420697320616c726561647920636c61696d65642062792074686973207760008201527f616c6c6574000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f506c656173652073656e642074686520657861637420616d6f756e742e000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4d61782070657220545820726561636865642e00000000000000000000000000600082015250565b7f436f6e7472616374206973207061757365640000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f4d65726b6c654469737472696275746f723a20496e76616c69642070726f6f66600082015250565b6141c381613cb4565b81146141ce57600080fd5b50565b6141da81613cc6565b81146141e557600080fd5b50565b6141f181613cd2565b81146141fc57600080fd5b50565b61420881613cdc565b811461421357600080fd5b50565b61421f81613d28565b811461422a57600080fd5b5056fea2646970667358221220ca4e051aaef5ffc3428e5ab2e28770fa1638c5627bd6887b718c60a94eb3049b64736f6c63430008040033697066733a2f2f516d56795634626d773743564d4c724178465574353942554d45714136634c5273537570797a35485245387244632f68696464656e2e6a736f6e