0x608060405234801561000f575f80fd5b50604051614ce0380380614ce0833981810160405281019061003191906108d6565b338585815f90816100429190610bae565b5080600190816100529190610bae565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100c5575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100bc9190610c8c565b60405180910390fd5b6100d48161012e60201b60201c565b506101057f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336101f160201b60201c565b610115838361022560201b60201c565b610124816103c660201b60201c565b5050505050610d77565b5f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6102008261042c60201b60201c565b61020f8161044960201b60201c565b61021f838361046960201b60201c565b50505050565b5f61023461055f60201b60201c565b6bffffffffffffffffffffffff16905080826bffffffffffffffffffffffff1611156102995781816040517f6f483d09000000000000000000000000000000000000000000000000000000008152600401610290929190610ce4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610309575f6040517fb6d9900a0000000000000000000000000000000000000000000000000000000081526004016103009190610c8c565b60405180910390fd5b60405180604001604052808473ffffffffffffffffffffffffffffffffffffffff168152602001836bffffffffffffffffffffffff16815250600a5f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151815f0160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050505050565b5f5b81518110156104285761041b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a683838151811061040857610407610d0b565b5b60200260200101516101f160201b60201c565b80806001019150506103c8565b5050565b5f600c5f8381526020019081526020015f20600101549050919050565b6104668161045b61056860201b60201c565b61056f60201b60201c565b50565b5f61047a83836105c660201b60201c565b610555576001600c5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506104f261056860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050610559565b5f90505b92915050565b5f612710905090565b5f33905090565b61057f82826105c660201b60201c565b6105c25780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105b9929190610d50565b60405180910390fd5b5050565b5f600c5f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61068982610643565b810181811067ffffffffffffffff821117156106a8576106a7610653565b5b80604052505050565b5f6106ba61062a565b90506106c68282610680565b919050565b5f67ffffffffffffffff8211156106e5576106e4610653565b5b6106ee82610643565b9050602081019050919050565b8281835e5f83830152505050565b5f61071b610716846106cb565b6106b1565b9050828152602081018484840111156107375761073661063f565b5b6107428482856106fb565b509392505050565b5f82601f83011261075e5761075d61063b565b5b815161076e848260208601610709565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6107a082610777565b9050919050565b6107b081610796565b81146107ba575f80fd5b50565b5f815190506107cb816107a7565b92915050565b5f6bffffffffffffffffffffffff82169050919050565b6107f1816107d1565b81146107fb575f80fd5b50565b5f8151905061080c816107e8565b92915050565b5f67ffffffffffffffff82111561082c5761082b610653565b5b602082029050602081019050919050565b5f80fd5b5f61085361084e84610812565b6106b1565b905080838252602082019050602084028301858111156108765761087561083d565b5b835b8181101561089f578061088b88826107bd565b845260208401935050602081019050610878565b5050509392505050565b5f82601f8301126108bd576108bc61063b565b5b81516108cd848260208601610841565b91505092915050565b5f805f805f60a086880312156108ef576108ee610633565b5b5f86015167ffffffffffffffff81111561090c5761090b610637565b5b6109188882890161074a565b955050602086015167ffffffffffffffff81111561093957610938610637565b5b6109458882890161074a565b9450506040610956888289016107bd565b9350506060610967888289016107fe565b925050608086015167ffffffffffffffff81111561098857610987610637565b5b610994888289016108a9565b9150509295509295909350565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806109ef57607f821691505b602082108103610a0257610a016109ab565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610a647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610a29565b610a6e8683610a29565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610ab2610aad610aa884610a86565b610a8f565b610a86565b9050919050565b5f819050919050565b610acb83610a98565b610adf610ad782610ab9565b848454610a35565b825550505050565b5f90565b610af3610ae7565b610afe818484610ac2565b505050565b5b81811015610b2157610b165f82610aeb565b600181019050610b04565b5050565b601f821115610b6657610b3781610a08565b610b4084610a1a565b81016020851015610b4f578190505b610b63610b5b85610a1a565b830182610b03565b50505b505050565b5f82821c905092915050565b5f610b865f1984600802610b6b565b1980831691505092915050565b5f610b9e8383610b77565b9150826002028217905092915050565b610bb7826109a1565b67ffffffffffffffff811115610bd057610bcf610653565b5b610bda82546109d8565b610be5828285610b25565b5f60209050601f831160018114610c16575f8415610c04578287015190505b610c0e8582610b93565b865550610c75565b601f198416610c2486610a08565b5f5b82811015610c4b57848901518255600182019150602085019450602081019050610c26565b86831015610c685784890151610c64601f891682610b77565b8355505b6001600288020188555050505b505050505050565b610c8681610796565b82525050565b5f602082019050610c9f5f830184610c7d565b92915050565b5f610cbf610cba610cb5846107d1565b610a8f565b610a86565b9050919050565b610ccf81610ca5565b82525050565b610cde81610a86565b82525050565b5f604082019050610cf75f830185610cc6565b610d046020830184610cd5565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b610d4a81610d38565b82525050565b5f604082019050610d635f830185610c7d565b610d706020830184610d41565b9392505050565b613f5c80610d845f395ff3fe608060405234801561000f575f80fd5b50600436106101f9575f3560e01c80635fc1964f1161011857806395d89b41116100ab578063c87b56dd1161007a578063c87b56dd146105ba578063d5391393146105ea578063d547741f14610608578063e985e9c514610624578063f2fde38b14610654576101f9565b806395d89b4114610546578063a217fddf14610564578063a22cb46514610582578063b88d4fde1461059e576101f9565b8063715018a6116100e7578063715018a6146104d257806371e2a657146104dc5780638da5cb5b146104f857806391d1485414610516576101f9565b80635fc1964f1461043a5780636352211e14610456578063685731071461048657806370a08231146104a2576101f9565b80632a55205a1161019057806342842e0e1161015f57806342842e0e146103b65780634f6ccce7146103d257806355f804b3146104025780635944c7531461041e576101f9565b80632a55205a1461031d5780632f2ff15d1461034e5780632f745c591461036a57806336568abe1461039a576101f9565b8063095ea7b3116101cc578063095ea7b31461029757806318160ddd146102b357806323b872dd146102d1578063248a9ca3146102ed576101f9565b806301ffc9a7146101fd57806304634d8d1461022d57806306fdde0314610249578063081812fc14610267575b5f80fd5b61021760048036038101906102129190612e07565b610670565b6040516102249190612e4c565b60405180910390f35b61024760048036038101906102429190612f00565b610681565b005b610251610697565b60405161025e9190612fae565b60405180910390f35b610281600480360381019061027c9190613001565b610726565b60405161028e919061303b565b60405180910390f35b6102b160048036038101906102ac9190613054565b610741565b005b6102bb610757565b6040516102c891906130a1565b60405180910390f35b6102eb60048036038101906102e691906130ba565b610763565b005b6103076004803603810190610302919061313d565b610862565b6040516103149190613177565b60405180910390f35b61033760048036038101906103329190613190565b61087f565b6040516103459291906131ce565b60405180910390f35b610368600480360381019061036391906131f5565b610a5b565b005b610384600480360381019061037f9190613054565b610a7d565b60405161039191906130a1565b60405180910390f35b6103b460048036038101906103af91906131f5565b610b21565b005b6103d060048036038101906103cb91906130ba565b610b9c565b005b6103ec60048036038101906103e79190613001565b610bbb565b6040516103f991906130a1565b60405180910390f35b61041c6004803603810190610417919061335f565b610c2d565b005b610438600480360381019061043391906133a6565b610c48565b005b610454600480360381019061044f9190613453565b610c60565b005b610470600480360381019061046b9190613001565b610cd8565b60405161047d919061303b565b60405180910390f35b6104a0600480360381019061049b91906134f3565b610ce9565b005b6104bc60048036038101906104b79190613571565b610e4a565b6040516104c991906130a1565b60405180910390f35b6104da610f00565b005b6104f660048036038101906104f19190613453565b610f13565b005b610500610f68565b60405161050d919061303b565b60405180910390f35b610530600480360381019061052b91906131f5565b610f90565b60405161053d9190612e4c565b60405180910390f35b61054e610ff4565b60405161055b9190612fae565b60405180910390f35b61056c611084565b6040516105799190613177565b60405180910390f35b61059c600480360381019061059791906135c6565b61108a565b005b6105b860048036038101906105b391906136a2565b6110a0565b005b6105d460048036038101906105cf9190613001565b6110bd565b6040516105e19190612fae565b60405180910390f35b6105f2611123565b6040516105ff9190613177565b60405180910390f35b610622600480360381019061061d91906131f5565b611147565b005b61063e60048036038101906106399190613722565b611169565b60405161064b9190612e4c565b60405180910390f35b61066e60048036038101906106699190613571565b6111f7565b005b5f61067a8261127b565b9050919050565b6106896112f4565b610693828261137b565b5050565b60605f80546106a59061378d565b80601f01602080910402602001604051908101604052809291908181526020018280546106d19061378d565b801561071c5780601f106106f35761010080835404028352916020019161071c565b820191905f5260205f20905b8154815290600101906020018083116106ff57829003601f168201915b5050505050905090565b5f61073082611516565b5061073a8261159c565b9050919050565b610753828261074e6115d5565b6115dc565b5050565b5f600880549050905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107d3575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016107ca919061303b565b60405180910390fd5b5f6107e683836107e16115d5565b6115ee565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461085c578382826040517f64283d7b000000000000000000000000000000000000000000000000000000008152600401610853939291906137bd565b60405180910390fd5b50505050565b5f600c5f8381526020019081526020015f20600101549050919050565b5f805f600b5f8681526020019081526020015f206040518060400160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020015f820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505f73ffffffffffffffffffffffffffffffffffffffff16815f015173ffffffffffffffffffffffffffffffffffffffff1603610a0857600a6040518060400160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020015f820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b5f610a11611708565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610a3d919061381f565b610a47919061388d565b9050815f0151819350935050509250929050565b610a6482610862565b610a6d81611711565b610a778383611725565b50505050565b5f610a8783610e4a565b8210610acc5782826040517fa57d13dc000000000000000000000000000000000000000000000000000000008152600401610ac39291906131ce565b60405180910390fd5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2054905092915050565b610b296115d5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b8d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b97828261180f565b505050565b610bb683838360405180602001604052805f8152506110a0565b505050565b5f610bc4610757565b8210610c09575f826040517fa57d13dc000000000000000000000000000000000000000000000000000000008152600401610c009291906131ce565b60405180910390fd5b60088281548110610c1d57610c1c6138bd565b5b905f5260205f2001549050919050565b610c356112f4565b80600e9081610c449190613a87565b5050565b610c506112f4565b610c5b8383836118f9565b505050565b610c686112f4565b5f5b82829050811015610cd357610cc67f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6848484818110610cac57610cab6138bd565b5b9050602002016020810190610cc19190613571565b611147565b8080600101915050610c6a565b505050565b5f610ce282611516565b9050919050565b610d137f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633610f90565b610d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4990613ba0565b60405180910390fd5b818190508484905014610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9190613c2e565b60405180910390fd5b5f8484905011610ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd690613c96565b60405180910390fd5b5f5b84849050811015610e4357610e36858583818110610e0257610e016138bd565b5b9050602002016020810190610e179190613571565b848484818110610e2a57610e296138bd565b5b90506020020135611aa8565b8080600101915050610de1565b5050505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ebb575f6040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401610eb2919061303b565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610f086112f4565b610f115f611ac5565b565b610f1b6112f4565b610f648282808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f82011690508083019250505050505050611b88565b5050565b5f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f600c5f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b6060600180546110039061378d565b80601f016020809104026020016040519081016040528092919081815260200182805461102f9061378d565b801561107a5780601f106110515761010080835404028352916020019161107a565b820191905f5260205f20905b81548152906001019060200180831161105d57829003601f168201915b5050505050905090565b5f801b81565b61109c6110956115d5565b8383611be8565b5050565b6110ab848484610763565b6110b784848484611d51565b50505050565b60606110c882611516565b505f6110d2611f03565b90505f8151116110f05760405180602001604052805f81525061111b565b806110fa84611f93565b60405160200161110b929190613cee565b6040516020818303038152906040525b915050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61115082610862565b61115981611711565b611163838361180f565b50505050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b6111ff6112f4565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361126f575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611266919061303b565b60405180910390fd5b61127881611ac5565b50565b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806112ed57506112ec8261205d565b5b9050919050565b6112fc6115d5565b73ffffffffffffffffffffffffffffffffffffffff1661131a610f68565b73ffffffffffffffffffffffffffffffffffffffff16146113795761133d6115d5565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611370919061303b565b60405180910390fd5b565b5f611384611708565b6bffffffffffffffffffffffff16905080826bffffffffffffffffffffffff1611156113e95781816040517f6f483d090000000000000000000000000000000000000000000000000000000081526004016113e0929190613d41565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611459575f6040517fb6d9900a000000000000000000000000000000000000000000000000000000008152600401611450919061303b565b60405180910390fd5b60405180604001604052808473ffffffffffffffffffffffffffffffffffffffff168152602001836bffffffffffffffffffffffff16815250600a5f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151815f0160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050505050565b5f80611521836120d6565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361159357826040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161158a91906130a1565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b6115e9838383600161210f565b505050565b5f806115fb8585856122ce565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361163e57611639846124d9565b61167d565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461167c5761167b818561251d565b5b5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036116be576116b984612667565b6116fd565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116fc576116fb8585612727565b5b5b809150509392505050565b5f612710905090565b6117228161171d6115d5565b6127ab565b50565b5f6117308383610f90565b611805576001600c5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506117a26115d5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050611809565b5f90505b92915050565b5f61181a8383610f90565b156118ef575f600c5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061188c6115d5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a4600190506118f3565b5f90505b92915050565b5f611902611708565b6bffffffffffffffffffffffff16905080826bffffffffffffffffffffffff161115611969578382826040517fdfd1fc1b00000000000000000000000000000000000000000000000000000000815260040161196093929190613d68565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119db57835f6040517f969f08520000000000000000000000000000000000000000000000000000000081526004016119d2929190613d9d565b60405180910390fd5b60405180604001604052808473ffffffffffffffffffffffffffffffffffffffff168152602001836bffffffffffffffffffffffff16815250600b5f8681526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151815f0160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555090505050505050565b611ac1828260405180602001604052805f8152506127fc565b5050565b5f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5b8151811015611be457611bd77f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6838381518110611bca57611bc96138bd565b5b6020026020010151610a5b565b8080600101915050611b8a565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c5857816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401611c4f919061303b565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d449190612e4c565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115611efd578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02611d946115d5565b8685856040518563ffffffff1660e01b8152600401611db69493929190613e16565b6020604051808303815f875af1925050508015611df157506040513d601f19601f82011682018060405250810190611dee9190613e74565b60015b611e72573d805f8114611e1f576040519150601f19603f3d011682016040523d82523d5f602084013e611e24565b606091505b505f815103611e6a57836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611e61919061303b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611efb57836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611ef2919061303b565b60405180910390fd5b505b50505050565b6060600e8054611f129061378d565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3e9061378d565b8015611f895780601f10611f6057610100808354040283529160200191611f89565b820191905f5260205f20905b815481529060010190602001808311611f6c57829003601f168201915b5050505050905090565b60605f6001611fa184612817565b0190505f8167ffffffffffffffff811115611fbf57611fbe61323b565b5b6040519080825280601f01601f191660200182016040528015611ff15781602001600182028036833780820191505090505b5090505f82602001820190505b600115612052578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161204757612046613860565b5b0494505f8503611ffe575b819350505050919050565b5f7f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120cf57506120ce82612968565b5b9050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b808061214757505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612279575f61215684611516565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121c057508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156121d357506121d18184611169565b155b1561221557826040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815260040161220c919061303b565b60405180910390fd5b811561227757838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b5f806122d9846120d6565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461231a576123198184866129e1565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146123a5576123595f855f8061210f565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461242457600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b60088054905060095f8381526020019081526020015f2081905550600881908060018154018082558091505060019003905f5260205f20015f909190919091505550565b5f61252783610e4a565b90505f60075f8481526020019081526020015f205490508181146125fe575f60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205490508060065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f20819055508160075f8381526020019081526020015f2081905550505b60075f8481526020019081526020015f205f905560065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f905550505050565b5f600160088054905061267a9190613e9f565b90505f60095f8481526020019081526020015f205490505f600883815481106126a6576126a56138bd565b5b905f5260205f200154905080600883815481106126c6576126c56138bd565b5b905f5260205f2001819055508160095f8381526020019081526020015f208190555060095f8581526020019081526020015f205f9055600880548061270e5761270d613ed2565b5b600190038181905f5260205f20015f9055905550505050565b5f600161273384610e4a565b61273d9190613e9f565b90508160065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20819055508060075f8481526020019081526020015f2081905550505050565b6127b58282610f90565b6127f85780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016127ef929190613eff565b60405180910390fd5b5050565b6128068383612aa4565b6128125f848484611d51565b505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612873577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161286957612868613860565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106128b0576d04ee2d6d415b85acef810000000083816128a6576128a5613860565b5b0492506020810190505b662386f26fc1000083106128df57662386f26fc1000083816128d5576128d4613860565b5b0492506010810190505b6305f5e1008310612908576305f5e10083816128fe576128fd613860565b5b0492506008810190505b612710831061292d57612710838161292357612922613860565b5b0492506004810190505b60648310612950576064838161294657612945613860565b5b0492506002810190505b600a831061295f576001810190505b80915050919050565b5f7f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806129da57506129d982612b97565b5b9050919050565b6129ec838383612c78565b612a9f575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a6057806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401612a5791906130a1565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401612a969291906131ce565b60405180910390fd5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b14575f6040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401612b0b919061303b565b60405180910390fd5b5f612b2083835f6115ee565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612b92575f6040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600401612b89919061303b565b60405180910390fd5b505050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612c6157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612c715750612c7082612d38565b5b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d2f57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612cf05750612cef8484611169565b5b80612d2e57508273ffffffffffffffffffffffffffffffffffffffff16612d168361159c565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612de681612db2565b8114612df0575f80fd5b50565b5f81359050612e0181612ddd565b92915050565b5f60208284031215612e1c57612e1b612daa565b5b5f612e2984828501612df3565b91505092915050565b5f8115159050919050565b612e4681612e32565b82525050565b5f602082019050612e5f5f830184612e3d565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612e8e82612e65565b9050919050565b612e9e81612e84565b8114612ea8575f80fd5b50565b5f81359050612eb981612e95565b92915050565b5f6bffffffffffffffffffffffff82169050919050565b612edf81612ebf565b8114612ee9575f80fd5b50565b5f81359050612efa81612ed6565b92915050565b5f8060408385031215612f1657612f15612daa565b5b5f612f2385828601612eab565b9250506020612f3485828601612eec565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612f8082612f3e565b612f8a8185612f48565b9350612f9a818560208601612f58565b612fa381612f66565b840191505092915050565b5f6020820190508181035f830152612fc68184612f76565b905092915050565b5f819050919050565b612fe081612fce565b8114612fea575f80fd5b50565b5f81359050612ffb81612fd7565b92915050565b5f6020828403121561301657613015612daa565b5b5f61302384828501612fed565b91505092915050565b61303581612e84565b82525050565b5f60208201905061304e5f83018461302c565b92915050565b5f806040838503121561306a57613069612daa565b5b5f61307785828601612eab565b925050602061308885828601612fed565b9150509250929050565b61309b81612fce565b82525050565b5f6020820190506130b45f830184613092565b92915050565b5f805f606084860312156130d1576130d0612daa565b5b5f6130de86828701612eab565b93505060206130ef86828701612eab565b925050604061310086828701612fed565b9150509250925092565b5f819050919050565b61311c8161310a565b8114613126575f80fd5b50565b5f8135905061313781613113565b92915050565b5f6020828403121561315257613151612daa565b5b5f61315f84828501613129565b91505092915050565b6131718161310a565b82525050565b5f60208201905061318a5f830184613168565b92915050565b5f80604083850312156131a6576131a5612daa565b5b5f6131b385828601612fed565b92505060206131c485828601612fed565b9150509250929050565b5f6040820190506131e15f83018561302c565b6131ee6020830184613092565b9392505050565b5f806040838503121561320b5761320a612daa565b5b5f61321885828601613129565b925050602061322985828601612eab565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61327182612f66565b810181811067ffffffffffffffff821117156132905761328f61323b565b5b80604052505050565b5f6132a2612da1565b90506132ae8282613268565b919050565b5f67ffffffffffffffff8211156132cd576132cc61323b565b5b6132d682612f66565b9050602081019050919050565b828183375f83830152505050565b5f6133036132fe846132b3565b613299565b90508281526020810184848401111561331f5761331e613237565b5b61332a8482856132e3565b509392505050565b5f82601f83011261334657613345613233565b5b81356133568482602086016132f1565b91505092915050565b5f6020828403121561337457613373612daa565b5b5f82013567ffffffffffffffff81111561339157613390612dae565b5b61339d84828501613332565b91505092915050565b5f805f606084860312156133bd576133bc612daa565b5b5f6133ca86828701612fed565b93505060206133db86828701612eab565b92505060406133ec86828701612eec565b9150509250925092565b5f80fd5b5f80fd5b5f8083601f84011261341357613412613233565b5b8235905067ffffffffffffffff8111156134305761342f6133f6565b5b60208301915083602082028301111561344c5761344b6133fa565b5b9250929050565b5f806020838503121561346957613468612daa565b5b5f83013567ffffffffffffffff81111561348657613485612dae565b5b613492858286016133fe565b92509250509250929050565b5f8083601f8401126134b3576134b2613233565b5b8235905067ffffffffffffffff8111156134d0576134cf6133f6565b5b6020830191508360208202830111156134ec576134eb6133fa565b5b9250929050565b5f805f806040858703121561350b5761350a612daa565b5b5f85013567ffffffffffffffff81111561352857613527612dae565b5b613534878288016133fe565b9450945050602085013567ffffffffffffffff81111561355757613556612dae565b5b6135638782880161349e565b925092505092959194509250565b5f6020828403121561358657613585612daa565b5b5f61359384828501612eab565b91505092915050565b6135a581612e32565b81146135af575f80fd5b50565b5f813590506135c08161359c565b92915050565b5f80604083850312156135dc576135db612daa565b5b5f6135e985828601612eab565b92505060206135fa858286016135b2565b9150509250929050565b5f67ffffffffffffffff82111561361e5761361d61323b565b5b61362782612f66565b9050602081019050919050565b5f61364661364184613604565b613299565b90508281526020810184848401111561366257613661613237565b5b61366d8482856132e3565b509392505050565b5f82601f83011261368957613688613233565b5b8135613699848260208601613634565b91505092915050565b5f805f80608085870312156136ba576136b9612daa565b5b5f6136c787828801612eab565b94505060206136d887828801612eab565b93505060406136e987828801612fed565b925050606085013567ffffffffffffffff81111561370a57613709612dae565b5b61371687828801613675565b91505092959194509250565b5f806040838503121561373857613737612daa565b5b5f61374585828601612eab565b925050602061375685828601612eab565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806137a457607f821691505b6020821081036137b7576137b6613760565b5b50919050565b5f6060820190506137d05f83018661302c565b6137dd6020830185613092565b6137ea604083018461302c565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61382982612fce565b915061383483612fce565b925082820261384281612fce565b91508282048414831517613859576138586137f2565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61389782612fce565b91506138a283612fce565b9250826138b2576138b1613860565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026139467fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261390b565b613950868361390b565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61398b61398661398184612fce565b613968565b612fce565b9050919050565b5f819050919050565b6139a483613971565b6139b86139b082613992565b848454613917565b825550505050565b5f90565b6139cc6139c0565b6139d781848461399b565b505050565b5b818110156139fa576139ef5f826139c4565b6001810190506139dd565b5050565b601f821115613a3f57613a10816138ea565b613a19846138fc565b81016020851015613a28578190505b613a3c613a34856138fc565b8301826139dc565b50505b505050565b5f82821c905092915050565b5f613a5f5f1984600802613a44565b1980831691505092915050565b5f613a778383613a50565b9150826002028217905092915050565b613a9082612f3e565b67ffffffffffffffff811115613aa957613aa861323b565b5b613ab3825461378d565b613abe8282856139fe565b5f60209050601f831160018114613aef575f8415613add578287015190505b613ae78582613a6c565b865550613b4e565b601f198416613afd866138ea565b5f5b82811015613b2457848901518255600182019150602085019450602081019050613aff565b86831015613b415784890151613b3d601f891682613a50565b8355505b6001600288020188555050505b505050505050565b7f43616c6c6572206973206e6f742061206d696e746572000000000000000000005f82015250565b5f613b8a601683612f48565b9150613b9582613b56565b602082019050919050565b5f6020820190508181035f830152613bb781613b7e565b9050919050565b7f4164647265737320616e6420746f6b656e20494420617272617973206d7573745f8201527f2068617665207468652073616d65206c656e6774680000000000000000000000602082015250565b5f613c18603583612f48565b9150613c2382613bbe565b604082019050919050565b5f6020820190508181035f830152613c4581613c0c565b9050919050565b7f4d757374206d696e74206174206c65617374206f6e6520746f6b656e000000005f82015250565b5f613c80601c83612f48565b9150613c8b82613c4c565b602082019050919050565b5f6020820190508181035f830152613cad81613c74565b9050919050565b5f81905092915050565b5f613cc882612f3e565b613cd28185613cb4565b9350613ce2818560208601612f58565b80840191505092915050565b5f613cf98285613cbe565b9150613d058284613cbe565b91508190509392505050565b5f613d2b613d26613d2184612ebf565b613968565b612fce565b9050919050565b613d3b81613d11565b82525050565b5f604082019050613d545f830185613d32565b613d616020830184613092565b9392505050565b5f606082019050613d7b5f830186613092565b613d886020830185613d32565b613d956040830184613092565b949350505050565b5f604082019050613db05f830185613092565b613dbd602083018461302c565b9392505050565b5f81519050919050565b5f82825260208201905092915050565b5f613de882613dc4565b613df28185613dce565b9350613e02818560208601612f58565b613e0b81612f66565b840191505092915050565b5f608082019050613e295f83018761302c565b613e36602083018661302c565b613e436040830185613092565b8181036060830152613e558184613dde565b905095945050505050565b5f81519050613e6e81612ddd565b92915050565b5f60208284031215613e8957613e88612daa565b5b5f613e9684828501613e60565b91505092915050565b5f613ea982612fce565b9150613eb483612fce565b9250828203905081811115613ecc57613ecb6137f2565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f604082019050613f125f83018561302c565b613f1f6020830184613168565b939250505056fea26469706673582212204c6dd475d0573d5bbead9311c382c10165d5989f9e244b99e80be68a3823a51f64736f6c634300081a003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000d3a32c3b3485f05d48f79fa137352891867aac0500000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000005545354323400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055453543234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b000000000000000000000000df346eece477f08adb0f732789d4b5d5114bdc90000000000000000000000000a7e0ccd04c117b303f80900c73c2181eba0789bf0000000000000000000000003266f21ee800f98a12cdd1d3b7f407cf742181af0000000000000000000000007eb4f08122aa1ef161838494129d9069f805f103000000000000000000000000154978aa3241337ddecab8dd255e96f88350468b0000000000000000000000009b79d9080f6c113945bc3adb2271d7a116fceda8000000000000000000000000febe06ae61d2efd17a3b5ae79b3755721c986a1d0000000000000000000000004e6e4d7e20f293febf8e91d26a3c07308e1f1870000000000000000000000000eee4c0ee82928873aad1832b97bc34953689fef60000000000000000000000006dd7e8e2f26773cadecde4d5fed0ca514a047e710000000000000000000000004796ed158bf35b4c25a79c173b8c16e7eddae968