jit-1_-_github__ysei~mruby-meta-circular-heiretu_-_nightly_-_2_0_1_7_1_0_0_1__1001710200.rb
33d32
< # when ?r then '[]' == vs[0] + vs[-1] # , Array # q
37d35
< # @@ks |= (0 .. 9).to_a.join + ?- # * '' higokan mruby 70410200 # ?0.upto # higokan mruby 70410200 # 7221410200 6ccae658 suzukaze # q
39d36
< # ) + ?i == k ? '' : ?. # q 2
41c38,39
< vs.each_byte { |c| s.include?(c) || break}
---
> # vs.each_byte { |c| s.include?(c) || break}
> vs.all? { |c| s.include?(c)}
195c193,194
< def ta(ta, cop) [ta.shift || 'getarg_a', ta.shift || cop][0 .. ta.pop || 1] end
---
> # def ta(ta, cop) [ta.shift || 'getarg_a', ta.shift || cop][0 .. ta.pop || 1] end
> def ta(l, cop) [l.shift || 'getarg_a', l.shift || cop][0 .. l.pop || 1] end
218d216
< # def s__r1_eq_sr01(*a) a[@@I_s__s][ a[@@I_s__r1]] == a[@@I_s__s][a[@@I_s__r0] + 1] end
278,280c276,280
< # 3080410200 : 5x2 ok ( gc ) : monami-ya.mrb 8270410200 813e2af8 # http://www.monami-ya.jp/
< self[0] = [['th', 'sym', 'ctr', 'cto'], # mruby 20410200 : higokan ? : ary_many
< [[thini], 0, [0], [0]]] # mruby 70410200 : 4x2 ok , 5x2 ng
---
> # 3080410200 : 5x2 ok ( gc ) : monami-ya.mrb 8270410200 813e2af8 # www.monami-ya.jp
> # self[0] = [['th', 'sym', 'ctr', 'cto'], # mruby 20410200 : higokan ? : ary_many
> # [[thini], 0, [0], [0]]] # mruby 70410200 : 4x2 ok , 5x2 ng
> self[0] = [['th', 'sym', 'ctr'], # mruby 20410200 : higokan ? : ary_many
> [[thini], 0, [-1]]] # mruby 70410200 : 4x2 ok , 5x2 ng
292d291
< # Slp.new.slp 0
361a361,369
>
> # n >= 0 && p(
> # to_ia(n)
> ## to_ia(n, pl)
> ## Rg.new(to_ia(n)).to_ra
> ## Rg.new(to_ia(n)).to_ra('th')
> ## rg = Rg.new(to_ia(n)); rg['ctr']
> # )
>
382a391,401
> @@Plmg = ->(pi, pv) {pi.map { |v| [v, pv.shift]}} # l
> def to_ia(n, lpl = self)
> if 0 == n
> # self[n]
> @@Plmg.(pl_g(-1), lpl[n][1]) # c
> else
> # @@Plmg.(pl_g(-1), self[n]) # c
> @@Plmg.(pl_g(-1), lpl[n]) # c
> end
> end
>
387c406,411
< (ctr = ctr_r.abs) != cto_r ? (ctr_s(-ctr); cto_s ctr) : -ctr
---
>
> ## ctr = ctr.abs
> ## ctr != cto ? (ctr_s -ctr; cto_s ctr) : -ctr
> # (ctr = ctr_r.abs) != cto_r ? (ctr_s -ctr; cto_s ctr) : -ctr
>
> [ctr = ctr_r, 0 <= ctr && ctr_s(-ctr)][0]
397,399c421,423
< def cto_r
< pl_eg('cto')[0]
< end
---
> # def cto_r
> # pl_eg('cto')[0]
> # end
406,409c430,433
< def cto_s(cto)
< pl_es(0, ['cto', [cto]])
< cto
< end
---
> # def cto_s(cto)
> # pl_es(0, ['cto', [cto]])
> # cto
> # end
438c462,463
< def st_id(a, pc)
---
> # def st_id(a, pc)
> def s_id(a, pc)
442,447d466
< # a.map! { |v|
< ### v.kind_of?(Array) ? __send__(v, pc) : v # unwork ( thread ? )
< ## knid(v, :Array) ? __method__(v, pc) : v # unwork ( thread ? )
< ## knid(v, :Array) ? __callee__(v, pc) : v # unwork ( thread ? )
< # knid(v, :Array) ? st_id(v, pc) : v
< # case v when Array then st_id(v, pc) else v end
449c468
< ## v.kind_of?(Array) ? __send__(a, pc) : a # unwork ( thread ? )
---
> ## v.kind_of?(Array) ? __send__(a, pc) : a # unwork ( thread ? )
452,453c471,474
< # knid(a, :Array) ? st_id(a, pc) : a
< case a when Array then st_id(a, pc) else a end
---
> ## knid(a, :Array) ? st_id(a, pc) : a
> # knid(a, :Array) ? s_id(a, pc) : a
> # case a when Array then st_id(a, pc) else a end
> case a when Array then s_id(a, pc) else a end
455d475
< # return a[0] if 2 > a.size
460d479
< # a.inject { |opc, op|
462d480
< #case opc when Numeric then else
464d481
< # print "#{pc.to_xeh} #{opc} #{op.to_xeh}\n" end
468d484
< # }
482,483c498,501
< th[idx] = st_id(th[idx], pc - 1) ;
< #### th[idx] = st_id(th[idx], pc - 1) if ckth(th[idx], 0) # fuguai taisaku
---
> # th[idx] = st_id(th[idx], pc - 1) ;
> th[idx] = s_id(th[idx], pc - 1) ;
> ##### th[idx] = st_id(th[idx], pc - 1) if ckth(th[idx], 0) # fuguai taisaku
> #### th[idx] = s_id(th[idx], pc - 1) if ckth(th[idx], 0) # fuguai taisaku
488d505
< # self.pl_es(pc, ['th', th])
493d509
< # Slp.new.slp 0
495d510
< ## Slp.new.slp(0, 4096)
498,499c513,514
< # idx += f && idx < mx ? 1 : 0 ##
< f && idx += idx < mx ? 1 : 0 ##
---
> # f && idx += idx < mx ? 1 : 0 ##
> f && idx += (mx <=> idx) + 1 >> 1 ##
532d546
< # Slp.new.slp
572d585
< # s[@p.sgp a[0]]
575d587
< # [mloc, @s[@p + a[0].sgp], @@m.unlock][1]
581d592
< # a = @s[@p.sgp a[0]] = a[1]
585d595
< # [mloc, @s[@p + a[0].sgp] = a[1], @@m.unlock][1]
589,592d598
<
< # def mloc
< # begin @@m.lock; rescue Slp.new.slp(0); retry end
< # end
619c625,626
< i ||= @a.assoc('ctr')[1]
---
> # i ||= @a.assoc('ctr')[1]
> i ||= @a.assoc('ctr')[1] + 1
621d627
< # self[@i] = a[0]
624d629
< # def []=(*a, v)
627c632,633
< i ||= @a.assoc('ctr')[1]
---
> # i ||= @a.assoc('ctr')[1]
> i ||= @a.assoc('ctr')[1] + 1
670d675
< # (@pl = ENVary.new(rmth + 1, [thini], [], [])).plini
703c708
< r = [r, r.map { |v| lpl.ckth(v, 1)}]
---
> # r = [r, r.map { |v| lpl.ckth(v, 1)}]
706c711,712
< r.map! { |v| [v[0], v[-1]]}
---
> # r.map! { |v| [v[0], v[-1]]}
> r = [r, r.map { |v| lpl.ckth(v, 1)}].map { |v| [v[0], v[-1]]}
733d738
< # sz = 4; ap = (1 << sz) - 1 - 1
735c740,741
< sz -= 2; ap = (ap << sz) + ap + (1 << (sz - 1)) >> sz
---
> # sz -= 2; ap = (ap << sz) + ap + (1 << (sz - 1)) >> sz
> sz -= 2; ap = ((ap << sz) + ap >> sz - 1) + 1 >> 1
743d748
< # r = (plr[r1] if 0 <= sz && r1 <= sz) || lm.(isr0, r1) # c
749,750c754,755
< # sz.step(sz - 1 + ap -= ap >> 2) { |n| plr<< lm.(isr0, s[n])} # p c
< mx = sz - 1 + ap -= ap >> 2
---
> # mx = sz - 1 + ap -= ap >> 2
> mx = sz - 1 + ap = ap - (ap >> 2) & 0x3f
752,753c757,758
< (mx - sz).times { |n| plr<< lm.(isr0, s[n])} # p c
< # (mx - sz).times { |n| s[n] && plr<< lm.(isr0, s[n])} # p c
---
> # (mx - sz).times { |n| plr<< lm.(isr0, s[n])} # p c
> (sz .. mx - 1).each { |n| plr<< lm.(isr0, s[n])} # p c
772d776
< # sz = plr.width
774d777
< # ca[flg.inject(0) { |rv, v| rv <<= 1; rv |= v ? 0 : 1}].call
782c785
< # } ##
---
> # } ##
790c793,795
< flg, pl = true
---
> # flg, pl = true
>
> pl = lpl.pl_g(pc)
794c799
< flg ? pl = lpl.pl_g(pc) : pl[i_th] = lpl.pl_eg(pc, 'th')
---
> # flg ? pl = lpl.pl_g(pc) : pl[i_th] = lpl.pl_eg(pc, 'th')
799a805,806
>
> pl[i_th] = lpl.pl_eg(pc, 'th')
805,806c812,813
< def iset2(rg, thi = 0, th = []) ###
< # def iset(rg) ##
---
> # def iset2(rg, thi = 0, th = []) ###
> def iset(rg) ##
815,819d821
< # printf("Unkown code %s \n", OPTABLE_SYM[imem.get_opcode(cop)])
< # return
< # )
< # fmla = fml
<
821d822
< # ta = ->(ta) { [ta.shift || 'getarg_a', ta.shift || cop][0 .. ta.pop || 1] } # l
823c824
< # th = [] ##
---
> th = [] ##
826,830c827,832
< # fvl = [->(oi) {[fv[oi] = th[oi] = (ta.(fv[oi])), []]}, # l c
< # ->(oi) {th += [[fv[oi] && ta.(fv[oi])], []][ # l c
< fvl = [->(oi) {[fv[oi] = th[oi] = (imem.ta(fv[oi], cop)), []]}, # l
< ->(oi) {th += [[fv[oi] && imem.ta(fv[oi], cop)], []][ # l
< ((wd = fv.width) <=> oi) >> 1]}] # .lazy
---
> # fvl = [->(oi) {[fv[oi] = th[oi] = (imem.ta(fv[oi], cop)), []]}, # l c
> # ->(oi) {th += [[fv[oi] && imem.ta(fv[oi], cop)], []][ # l c
> # ((wd = fv.width) <=> oi) >> 1]}] # .lazy
> fvl = [->(oi) {th += [[fv[oi] && imem.ta(fv[oi], cop)], []][ # l c
> ((wd = fv.width) <=> oi) >> 1]},
> ->(oi) {[fv[oi] = th[oi] = (imem.ta(fv[oi], cop)), []]}] # .lazy # l c
833d834
< # fml = fmla.dup
838d838
< # fv = fml.shift
842,843c842,843
< when 'th' then fv = fvl[oi <=> 0].(oi) # c
< # when 'th' then (fv, th, wd) = imem.fvl(oi, th, fv, wd, cop)
---
> # when 'th' then fv = fvl[oi <=> 0].(oi) # c
> when 'th' then fv = (fvl.delete_at(1) || fvl[0]).(oi) # c
851,852c851,852
< # thi = 0 ##
< # k_sp_r = pla.assoc('sp')[1]
---
> thi = 0 ##
> # thio = thi - 1
854,863c854,867
< # Fiber.new { ##
< # loop { ##
< opa = opg.(thi) # c
< # opa.push(k_sp_r, [sp]) if 0 == thi
< opa.push(k_sp, [sp]) if 0 == thi
<
< pl.pl_es(pc1, opa)
< pl.ctr_s(pc1) if 0 == thi
<
< # Slp.new.slp 0
---
> Fiber.new { ##
> loop { ##
> if 0 > pl.ctr_r || 0 != thi # && thi != thio
> opa = opg.(thi) # c
> opa.push(k_sp, [sp]) if 0 == thi
>
> pl.pl_es(pc1, opa)
>
> pl.ctr_s(pc1) if 0 == thi
>
> # thio = thi
> if 0 != thi && wd <= thi then thi = -1 end
> # if 0 != thi && wd <= thi && 0 < thio then thi = -1 end
> end
864a869
> # @@slp.slp
869,882c874,887
< if 0 != thi && wd <= thi then thi = -1 end
< [thi + 1, th] ###
< # Fiber.yield(thi += 1) ##
< # } ##
< # } ##
< end
<
< def iset(rg)
< thi = 0
< th = []
<
< Fiber.new {
< loop {
< thi, th = iset2(rg, thi, th)
---
> # if 0 != thi && wd <= thi then thi = -1; th = [] end
> # [thi + 1, th] ###
> Fiber.yield(thi += 1) ##
> } ##
> } ##
> end
>
> # def iset(rg)
> # thi = 0
> # th = []
>
> # Fiber.new {
> # loop {
> # thi, th = iset2(rg, thi, th)
884,887c889,892
< Fiber.yield(thi)
< }
< }
< end
---
> # Fiber.yield(thi)
> # }
> # }
> # end
919c924,925
< rg = Rg.new([['ctr', 1], ['thi', 0], ['pc', @pc], ['sp', @sp], ['cop'], ['sym']])
---
> # rg = Rg.new([['ctr', 1], ['thi', 0], ['pc', @pc], ['sp', @sp], ['cop'], ['sym']])
> rg = Rg.new([['ctr', 0], ['thi', 0], ['pc', @pc], ['sp', @sp], ['cop'], ['sym']])
935,937d940
< # rg['cop'] = c
< # rg['sym'] = s
< # rg['cop'], rg['sym'] = opf(irep, rg['pc'])
956d958
< ##### ise = iset(rg) if 0 == rg['thi'] ##
958d959
< # rg['thi'] = ise.resume ##
962c963,968
< (rg.push('pc', rg['pc']); rg.push('sp', rg['sp'])) if 0 == rg['thi'] ##
---
> if 0 <= rg['ctr', 1] && 0 == rg['thi']
> # (rg.push('pc', rg['pc']); rg.push('sp', rg['sp'])) if 0 == rg['thi'] ##
> rg.push('pc', rg['pc']) ##
> rg.push('sp', rg['sp']) ##
> rg['ctr', 1] += 1
> end
965,973c971,975
< # rga.('push', nil, 'pc', rg['pc']) # c
< rg.push('pc', rg['pc'])
< rg.push('sp', rg['sp'])
< rg['ctr', 1] *= -1 # kakezan
<
< # while ! lpl.ctr_c do Slp.new.slp end
<
< lpl.plini
< @flag[0] = 2
---
> if 0 <= rg['ctr', 1]
> rg.push('pc', rg['pc'])
> rg.push('sp', rg['sp'])
> rg['ctr', 1] *= -1 # kakezan
> end
974a977,978
> if 0 == rg['ctr', 1]
> # while ! lpl.ctr_c do Slp.new.slp end
976c980,981
< case rg['sym']
---
> lpl.plini
> @flag[0] = 2
978,979d982
< # 何もしない
< # when :NOP
981,986c984
< # JMP nでpcをnだけ増やす。ただし、nは符号付き
< when :JMP
< # @pc = @pc + getarg_sbx(cop)
< # pc = pc + lpl.getarg_sbx(cop) - 1
< rg['pc', -1] = rg['pc'] + imem.getarg_sbx(rg['cop']) - 1
< # next
---
> case rg['sym']
988,996c986,987
< when :JMPIF
< # if @stack[@sp + getarg_a(cop)] then
< # if @stack[sp + lpl.getarg_a(cop)] then
< if @stack[imem.getarg_a(rg['cop'])] then
< # @pc = @pc + getarg_sbx(cop)
< # pc = pc + lpl.getarg_sbx(cop) - 1
< rg['pc', -1] = rg['pc'] + imem.getarg_sbx(rg['cop']) - 1
< # next
< end
---
> # 何もしない
> # when :NOP
998,1002c989,990
< # JMPNOT Ra, nでもしRaがnilかfalseならpcをnだけ増やす。ただし、nは符号付き
< when :JMPNOT
< # if !@stack[@sp + getarg_a(cop)] then
< # if !@stack[sp + lpl.getarg_a(cop)] then
< if !@stack[imem.getarg_a(rg['cop'])] then
---
> # JMP nでpcをnだけ増やす。ただし、nは符号付き
> when :JMP
1007d994
< end
1009,1048c996,1004
< # メソッドの先頭で引数のセットアップする命令。面倒なので詳細は省略
< when :ENTER
< # rg['pc', -1] = rg['pc']
<
< # SEND Ra, mid, anumでRaをレシーバにしてシンボルmidの名前のメソッドを
< # 呼び出す。ただし、引数はanum個あり、R(a+1), R(a+2)... R(a+anum)が引数
< when :SEND
< # a = getarg_a(cop)
< # a = lpl.getarg_a(cop)
< a = imem.getarg_a(rg['cop'])
< # mid = @irep.syms[getarg_b(cop)]
< # mid = irep.syms[lpl.getarg_b(cop)]
< mid = irep.syms[imem.getarg_b(rg['cop'])]
< # n = getarg_c(cop)
< # n = lpl.getarg_c(cop)
< n = imem.getarg_c(rg['cop'])
< # newirep = Irep::get_irep(@stack[@sp + a], mid)
< newirep = Irep::get_irep(@stack[a], mid)
< if newirep then
< # @callinfo[@cp] = @sp
< # @callinfo[@cp] = rg['sp']
< # @cp += 1
< # @callinfo[@cp] = @pc
< # @callinfo[@cp] = rg['pc']
< # @cp += 1
< # @callinfo[@cp] = @irep
< # @callinfo[@cp] = irep
< # @cp += 1
< @callinfo[@cp ... @cp += 3] = [rg['sp'], rg['pc'], irep]
<
< # @sp += a
< # rg['sp'] += a
< rg['sp', -1] = rg['sp'] + a
<
< # @pc = 0
< rg['pc', -1] = -1
< # @irep = newirep
< irep = newirep
< # @irepid = @irep.id
< @irepid = irep.id
---
> when :JMPIF
> # if @stack[@sp + getarg_a(cop)] then
> # if @stack[sp + lpl.getarg_a(cop)] then
> if @stack[imem.getarg_a(rg['cop'])] then
> # @pc = @pc + getarg_sbx(cop)
> # pc = pc + lpl.getarg_sbx(cop) - 1
> rg['pc', -1] = rg['pc'] + imem.getarg_sbx(rg['cop']) - 1
> # next
> end
1050,1055c1006,1014
< # next
< else
< args = []
< n.times do |i|
< # args.push @stack[@sp + a + i + 1]
< args<< @stack[a + i + 1] # p
---
> # JMPNOT Ra, nでもしRaがnilかfalseならpcをnだけ増やす。ただし、nは符号付き
> when :JMPNOT
> # if !@stack[@sp + getarg_a(cop)] then
> # if !@stack[sp + lpl.getarg_a(cop)] then
> if !@stack[imem.getarg_a(rg['cop'])] then
> # @pc = @pc + getarg_sbx(cop)
> # pc = pc + lpl.getarg_sbx(cop) - 1
> rg['pc', -1] = rg['pc'] + imem.getarg_sbx(rg['cop']) - 1
> # next
1058,1060c1017,1065
< # @stack[@sp + a] = @stack[@sp + a].send(mid, *args)
< @stack[a] = @stack[a].send(mid, *args)
< end
---
> # メソッドの先頭で引数のセットアップする命令。面倒なので詳細は省略
> when :ENTER
> # rg['pc', -1] = rg['pc']
>
> # SEND Ra, mid, anumでRaをレシーバにしてシンボルmidの名前のメソッドを
> # 呼び出す。ただし、引数はanum個あり、R(a+1), R(a+2)... R(a+anum)が引数
> when :SEND
> # a = getarg_a(cop)
> # a = lpl.getarg_a(cop)
> a = imem.getarg_a(rg['cop'])
> # mid = @irep.syms[getarg_b(cop)]
> # mid = irep.syms[lpl.getarg_b(cop)]
> mid = irep.syms[imem.getarg_b(rg['cop'])]
> # n = getarg_c(cop)
> # n = lpl.getarg_c(cop)
> n = imem.getarg_c(rg['cop'])
> # newirep = Irep::get_irep(@stack[@sp + a], mid)
> newirep = Irep::get_irep(@stack[a], mid)
> if newirep then
> # @callinfo[@cp] = @sp
> # @cp += 1
> # @callinfo[@cp] = @pc
> # @cp += 1
> # @callinfo[@cp] = @irep
> # @cp += 1
> @callinfo[@cp ... @cp += 3] = [rg['sp'], rg['pc'], irep]
>
> # @sp += a
> # rg['sp'] += a
> rg['sp', -1] = rg['sp'] + a
>
> # @pc = 0
> rg['pc', -1] = -1
> # @irep = newirep
> irep = newirep
> # @irepid = @irep.id
> @irepid = irep.id
>
> # next
> else
> args = []
> n.times do |i|
> # args.push @stack[@sp + a + i + 1]
> args<< @stack[a + i + 1] # p
> end
>
> # @stack[@sp + a] = @stack[@sp + a].send(mid, *args)
> @stack[a] = @stack[a].send(mid, *args)
> end
1062,1085c1067,1094
< # RETURN Raで呼び出し元のメソッドに戻る。Raが戻り値になる
< when :RETURN
< if @cp == 0 then
< # return @stack[@sp + getarg_a(cop)]
< # return @stack[sp + lpl.getarg_a(cop)]
< return @stack[imem.getarg_a(rg['cop'])]
< else
< # @stack[@sp] = @stack[@sp + getarg_a(cop)]
< # @stack[sp] = @stack[sp + lpl.getarg_a(cop)]
< @stack[0] = @stack[imem.getarg_a(rg['cop'])]
< @cp -= 1
< # @irep = @callinfo[@cp]
< irep = @callinfo[@cp]
< # @irepid = @irep.id
< @irepid = irep.id
< @cp -= 1
< # @pc = @callinfo[@cp]
< # pc = @callinfo[@cp] # - 1
< rg['pc', -1] = @callinfo[@cp] # - 1
< @cp -= 1
< # @sp = @callinfo[@cp]
< # sp = @callinfo[@cp]
< # rg['sp'] = @callinfo[@cp]
< rg['sp', -1] = @callinfo[@cp]
---
> # RETURN Raで呼び出し元のメソッドに戻る。Raが戻り値になる
> when :RETURN
> if @cp == 0 then
> # return @stack[@sp + getarg_a(cop)]
> # return @stack[sp + lpl.getarg_a(cop)]
> return @stack[imem.getarg_a(rg['cop'])]
> else
> # @stack[@sp] = @stack[@sp + getarg_a(cop)]
> # @stack[sp] = @stack[sp + lpl.getarg_a(cop)]
> @stack[0] = @stack[imem.getarg_a(rg['cop'])]
> @cp -= 1
> # @irep = @callinfo[@cp]
> irep = @callinfo[@cp]
> # @irepid = @irep.id
> @irepid = irep.id
> @cp -= 1
> # @pc = @callinfo[@cp]
> # pc = @callinfo[@cp] - 1
> rg['pc', -1] = @callinfo[@cp] # - 1
> @cp -= 1
> # @sp = @callinfo[@cp]
> # sp = @callinfo[@cp]
> # rg['sp'] = @callinfo[@cp]
> rg['sp', -1] = @callinfo[@cp]
> end
> # else
> # printf("Unkown code %s \n", OPTABLE_SYM[get_opcode(cop)])
> # printf("Unkown code %s \n", OPTABLE_SYM[imem.get_opcode(cop)])
1087,1089d1095
< # else
< # printf("Unkown code %s \n", OPTABLE_SYM[get_opcode(cop)])
< # printf("Unkown code %s \n", OPTABLE_SYM[imem.get_opcode(cop)])
1091a1098
> rg['ctr', 1] -= 1 if 0 < rg['ctr', 1]
1093a1101,1102
> # rg['ctr', 1] -= 1 if flg[0]
>
1102,1103c1111,1112
<
< rg['ctr', 1] *= -1 # kakezan
---
> @pc = rg['pc']
> # rg['ctr', 1] *= -1 # kakezan
1114d1122
< # Slp.new.slp 0
1117d1124
< # Slp.new.slp
--
YAMAGUTIseisei ( str_h__namae = { :sei => "山口" , :mei => "青星" } )
http://hello.to/seisei/ mailto:seisei@.68..net tel:081-70-5152-1104
heiwa furiisekkusu 1tu
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735