FAILURE MAP
← Case archive

FA-21331 / Assistive announcements / Open access

Identical summaries in different forms suppress each other · case 01

The announcement trace violates the stated error-announcement-digest contract.

Verified by executionVariant 1 · 7 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

Fault site: if last.get(e[1])==text: continue is implemented as if text in last.values(): continue

VERIFIED REPAIR

Restore the stated transition: if last.get(e[1])==text: continue

Unsuccessful approach: The attempted repair substitutes if last: continue and still violates a regression oracle.

Case contract

Errors are keyed by [form,field,code] and retain first-seen ordering. Add replaces text for same key. Resolve deletes exact key. Rename-form transfers its keys preserving per-key text. Digest for a form emits first error text plus remaining count, or all-clear if none; consecutive identical digests for the same form are suppressed. Invalidate clears only that form digest cache. Clear-form removes its errors. Return digest output and ordered errors.

Why this case matters

Deterministic controlled model of assistive announcement delivery.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(events):
    errors={}; last={}; out=[]
    for e in events:
        if e[0]=='add': errors[(e[1],e[2],e[3])]=e[4]
        elif e[0]=='resolve': errors.pop((e[1],e[2],e[3]),None)
        elif e[0]=='clear': errors={k:v for k,v in errors.items() if k[0]!=e[1]}
        elif e[0]=='rename':
            errors={(e[2] if k[0]==e[1] else k[0],k[1],k[2]):v for k,v in errors.items()}
            last.pop(e[1],None); last.pop(e[2],None)
        elif e[0]=='invalidate': last.pop(e[1],None)
        elif e[0]=='digest':
            rows=[v for k,v in errors.items() if k[0]==e[1]]
            text=rows[0]+'; '+str(len(rows)-1)+' more' if rows else 'all clear'
            if text in last.values(): continue
            out.append([e[1],text])
            last[e[1]]=text
    return [out,[[*k,v] for k,v in errors.items()]]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = ["[['add','f','x','required','missing'*N],['add','f','x','format','bad'],['digest','f'],['add','f','x','required','updated'],['digest','f'],['digest','f'],['resolve','f','x','required'],['digest','f']]", "[['add','f','x','bad','same'*N],['add','g','y','bad','same'*N],['digest','f'],['digest','g'],['invalidate','f'],['digest','g'],['digest','f']]", "[['add','f','x','bad','one'*N],['add','g','y','bad','two'],['clear','f']]", "[['digest','f'],['digest','g'],['rename','f','g'],['digest','g'],['digest','f']]", "[['add','f','x','bad','one'*N],['add','h','y','bad','two'],['rename','f','g'],['digest','g']]", "[['digest','empty'],['digest','empty']]", '[]']
expected = {1: [[[['f', 'missing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'same; 0 more'], ['g', 'same; 0 more'], ['f', 'same; 0 more']], [['f', 'x', 'bad', 'same'], ['g', 'y', 'bad', 'same']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'one; 0 more']], [['g', 'x', 'bad', 'one'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 2: [[[['f', 'missingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesame; 0 more'], ['g', 'samesame; 0 more'], ['f', 'samesame; 0 more']], [['f', 'x', 'bad', 'samesame'], ['g', 'y', 'bad', 'samesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneone; 0 more']], [['g', 'x', 'bad', 'oneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 3: [[[['f', 'missingmissingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesamesame; 0 more'], ['g', 'samesamesame; 0 more'], ['f', 'samesamesame; 0 more']], [['f', 'x', 'bad', 'samesamesame'], ['g', 'y', 'bad', 'samesamesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneoneone; 0 more']], [['g', 'x', 'bad', 'oneoneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 4: [[[['f', 'missingmissingmissingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesamesamesame; 0 more'], ['g', 'samesamesamesame; 0 more'], ['f', 'samesamesamesame; 0 more']], [['f', 'x', 'bad', 'samesamesamesame'], ['g', 'y', 'bad', 'samesamesamesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneoneoneone; 0 more']], [['g', 'x', 'bad', 'oneoneoneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 5: [[[['f', 'missingmissingmissingmissingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesamesamesamesame; 0 more'], ['g', 'samesamesamesamesame; 0 more'], ['f', 'samesamesamesamesame; 0 more']], [['f', 'x', 'bad', 'samesamesamesamesame'], ['g', 'y', 'bad', 'samesamesamesamesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneoneoneoneone; 0 more']], [['g', 'x', 'bad', 'oneoneoneoneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]]}[N]
for i, expression in enumerate(fixtures):
    check("trace-"+str(i+1), solve(eval(expression)), expected[i])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
trace-1[[['f', 'missing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]][[['f', 'missing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]]Passed
trace-2[[['f', 'same; 0 more'], ['g', 'same; 0 more']], [['f', 'x', 'bad', 'same'], ['g', 'y', 'bad', 'same']]][[['f', 'same; 0 more'], ['g', 'same; 0 more'], ['f', 'same; 0 more']], [['f', 'x', 'bad', 'same'], ['g', 'y', 'bad', 'same']]]Failed
trace-3[[], [['g', 'y', 'bad', 'two']]][[], [['g', 'y', 'bad', 'two']]]Passed
trace-4[[['f', 'all clear'], ['g', 'all clear']], []][[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []]Failed
trace-5[[['g', 'one; 0 more']], [['g', 'x', 'bad', 'one'], ['h', 'y', 'bad', 'two']]][[['g', 'one; 0 more']], [['g', 'x', 'bad', 'one'], ['h', 'y', 'bad', 'two']]]Passed
trace-6[[['empty', 'all clear']], []][[['empty', 'all clear']], []]Passed
trace-7[[], []][[], []]Passed

SHA-256 / 4b9a676bc04aac00a3e90ad4db78fe9df57f76738824d66494aae0a18f205e8f

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(events):
    errors={}; last={}; out=[]
    for e in events:
        if e[0]=='add': errors[(e[1],e[2],e[3])]=e[4]
        elif e[0]=='resolve': errors.pop((e[1],e[2],e[3]),None)
        elif e[0]=='clear': errors={k:v for k,v in errors.items() if k[0]!=e[1]}
        elif e[0]=='rename':
            errors={(e[2] if k[0]==e[1] else k[0],k[1],k[2]):v for k,v in errors.items()}
            last.pop(e[1],None); last.pop(e[2],None)
        elif e[0]=='invalidate': last.pop(e[1],None)
        elif e[0]=='digest':
            rows=[v for k,v in errors.items() if k[0]==e[1]]
            text=rows[0]+'; '+str(len(rows)-1)+' more' if rows else 'all clear'
            if last: continue
            out.append([e[1],text])
            last[e[1]]=text
    return [out,[[*k,v] for k,v in errors.items()]]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = ["[['add','f','x','required','missing'*N],['add','f','x','format','bad'],['digest','f'],['add','f','x','required','updated'],['digest','f'],['digest','f'],['resolve','f','x','required'],['digest','f']]", "[['add','f','x','bad','same'*N],['add','g','y','bad','same'*N],['digest','f'],['digest','g'],['invalidate','f'],['digest','g'],['digest','f']]", "[['add','f','x','bad','one'*N],['add','g','y','bad','two'],['clear','f']]", "[['digest','f'],['digest','g'],['rename','f','g'],['digest','g'],['digest','f']]", "[['add','f','x','bad','one'*N],['add','h','y','bad','two'],['rename','f','g'],['digest','g']]", "[['digest','empty'],['digest','empty']]", '[]']
expected = {1: [[[['f', 'missing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'same; 0 more'], ['g', 'same; 0 more'], ['f', 'same; 0 more']], [['f', 'x', 'bad', 'same'], ['g', 'y', 'bad', 'same']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'one; 0 more']], [['g', 'x', 'bad', 'one'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 2: [[[['f', 'missingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesame; 0 more'], ['g', 'samesame; 0 more'], ['f', 'samesame; 0 more']], [['f', 'x', 'bad', 'samesame'], ['g', 'y', 'bad', 'samesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneone; 0 more']], [['g', 'x', 'bad', 'oneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 3: [[[['f', 'missingmissingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesamesame; 0 more'], ['g', 'samesamesame; 0 more'], ['f', 'samesamesame; 0 more']], [['f', 'x', 'bad', 'samesamesame'], ['g', 'y', 'bad', 'samesamesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneoneone; 0 more']], [['g', 'x', 'bad', 'oneoneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 4: [[[['f', 'missingmissingmissingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesamesamesame; 0 more'], ['g', 'samesamesamesame; 0 more'], ['f', 'samesamesamesame; 0 more']], [['f', 'x', 'bad', 'samesamesamesame'], ['g', 'y', 'bad', 'samesamesamesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneoneoneone; 0 more']], [['g', 'x', 'bad', 'oneoneoneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 5: [[[['f', 'missingmissingmissingmissingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesamesamesamesame; 0 more'], ['g', 'samesamesamesamesame; 0 more'], ['f', 'samesamesamesamesame; 0 more']], [['f', 'x', 'bad', 'samesamesamesamesame'], ['g', 'y', 'bad', 'samesamesamesamesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneoneoneoneone; 0 more']], [['g', 'x', 'bad', 'oneoneoneoneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]]}[N]
for i, expression in enumerate(fixtures):
    check("trace-"+str(i+1), solve(eval(expression)), expected[i])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
trace-1[[['f', 'missing; 1 more']], [['f', 'x', 'format', 'bad']]][[['f', 'missing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]]Failed
trace-2[[['f', 'same; 0 more'], ['g', 'same; 0 more']], [['f', 'x', 'bad', 'same'], ['g', 'y', 'bad', 'same']]][[['f', 'same; 0 more'], ['g', 'same; 0 more'], ['f', 'same; 0 more']], [['f', 'x', 'bad', 'same'], ['g', 'y', 'bad', 'same']]]Failed
trace-3[[], [['g', 'y', 'bad', 'two']]][[], [['g', 'y', 'bad', 'two']]]Passed
trace-4[[['f', 'all clear'], ['g', 'all clear']], []][[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []]Failed
trace-5[[['g', 'one; 0 more']], [['g', 'x', 'bad', 'one'], ['h', 'y', 'bad', 'two']]][[['g', 'one; 0 more']], [['g', 'x', 'bad', 'one'], ['h', 'y', 'bad', 'two']]]Passed
trace-6[[['empty', 'all clear']], []][[['empty', 'all clear']], []]Passed
trace-7[[], []][[], []]Passed

SHA-256 / 07d6a0ecf2377530b0d60d1e25bc7c81d82bdbd31281304fd79a5d80ab258396

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(events):
    errors={}; last={}; out=[]
    for e in events:
        if e[0]=='add': errors[(e[1],e[2],e[3])]=e[4]
        elif e[0]=='resolve': errors.pop((e[1],e[2],e[3]),None)
        elif e[0]=='clear': errors={k:v for k,v in errors.items() if k[0]!=e[1]}
        elif e[0]=='rename':
            errors={(e[2] if k[0]==e[1] else k[0],k[1],k[2]):v for k,v in errors.items()}
            last.pop(e[1],None); last.pop(e[2],None)
        elif e[0]=='invalidate': last.pop(e[1],None)
        elif e[0]=='digest':
            rows=[v for k,v in errors.items() if k[0]==e[1]]
            text=rows[0]+'; '+str(len(rows)-1)+' more' if rows else 'all clear'
            if last.get(e[1])==text: continue
            out.append([e[1],text])
            last[e[1]]=text
    return [out,[[*k,v] for k,v in errors.items()]]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = ["[['add','f','x','required','missing'*N],['add','f','x','format','bad'],['digest','f'],['add','f','x','required','updated'],['digest','f'],['digest','f'],['resolve','f','x','required'],['digest','f']]", "[['add','f','x','bad','same'*N],['add','g','y','bad','same'*N],['digest','f'],['digest','g'],['invalidate','f'],['digest','g'],['digest','f']]", "[['add','f','x','bad','one'*N],['add','g','y','bad','two'],['clear','f']]", "[['digest','f'],['digest','g'],['rename','f','g'],['digest','g'],['digest','f']]", "[['add','f','x','bad','one'*N],['add','h','y','bad','two'],['rename','f','g'],['digest','g']]", "[['digest','empty'],['digest','empty']]", '[]']
expected = {1: [[[['f', 'missing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'same; 0 more'], ['g', 'same; 0 more'], ['f', 'same; 0 more']], [['f', 'x', 'bad', 'same'], ['g', 'y', 'bad', 'same']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'one; 0 more']], [['g', 'x', 'bad', 'one'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 2: [[[['f', 'missingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesame; 0 more'], ['g', 'samesame; 0 more'], ['f', 'samesame; 0 more']], [['f', 'x', 'bad', 'samesame'], ['g', 'y', 'bad', 'samesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneone; 0 more']], [['g', 'x', 'bad', 'oneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 3: [[[['f', 'missingmissingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesamesame; 0 more'], ['g', 'samesamesame; 0 more'], ['f', 'samesamesame; 0 more']], [['f', 'x', 'bad', 'samesamesame'], ['g', 'y', 'bad', 'samesamesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneoneone; 0 more']], [['g', 'x', 'bad', 'oneoneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 4: [[[['f', 'missingmissingmissingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesamesamesame; 0 more'], ['g', 'samesamesamesame; 0 more'], ['f', 'samesamesamesame; 0 more']], [['f', 'x', 'bad', 'samesamesamesame'], ['g', 'y', 'bad', 'samesamesamesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneoneoneone; 0 more']], [['g', 'x', 'bad', 'oneoneoneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 5: [[[['f', 'missingmissingmissingmissingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesamesamesamesame; 0 more'], ['g', 'samesamesamesamesame; 0 more'], ['f', 'samesamesamesamesame; 0 more']], [['f', 'x', 'bad', 'samesamesamesamesame'], ['g', 'y', 'bad', 'samesamesamesamesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneoneoneoneone; 0 more']], [['g', 'x', 'bad', 'oneoneoneoneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]]}[N]
for i, expression in enumerate(fixtures):
    check("trace-"+str(i+1), solve(eval(expression)), expected[i])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
trace-1[[['f', 'missing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]][[['f', 'missing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]]Passed
trace-2[[['f', 'same; 0 more'], ['g', 'same; 0 more'], ['f', 'same; 0 more']], [['f', 'x', 'bad', 'same'], ['g', 'y', 'bad', 'same']]][[['f', 'same; 0 more'], ['g', 'same; 0 more'], ['f', 'same; 0 more']], [['f', 'x', 'bad', 'same'], ['g', 'y', 'bad', 'same']]]Passed
trace-3[[], [['g', 'y', 'bad', 'two']]][[], [['g', 'y', 'bad', 'two']]]Passed
trace-4[[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []][[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []]Passed
trace-5[[['g', 'one; 0 more']], [['g', 'x', 'bad', 'one'], ['h', 'y', 'bad', 'two']]][[['g', 'one; 0 more']], [['g', 'x', 'bad', 'one'], ['h', 'y', 'bad', 'two']]]Passed
trace-6[[['empty', 'all clear']], []][[['empty', 'all clear']], []]Passed
trace-7[[], []][[], []]Passed

SHA-256 / 35daf018dc3b2620363bdcf7d1857aff207286797769e8952193119462874032

Verification & scope

Stipulated bounded policy, not a browser, speech engine, platform API, or standards conformance claim. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.

Observations recorded using Python 3.12.14 at 2026-09-29T14:40:27.750154+00:00.

Case digest / 3003995e3cca96011d00f4b6e7a892500836ffdf07bbc00f888b510181076319